Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подключение библиотеки импорта для dll 
:(
    Опции темы
ex386
Дата 27.2.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Здравствуйте Товарищи!
Создаю значитс dll по примеру из MSDN:

Код

#include <windows.h>
 
#define EOF (-1)
 
#ifdef __cplusplus    // If used by C++ code, 
extern "C" {          // we need to export the C interface
#endif
 
__declspec(dllexport) int myPuts(LPTSTR lpszMsg)
{
    DWORD cchWritten;
    HANDLE hStdout;
    BOOL fRet;
 
    // Get a handle to the standard output device.
 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    if (INVALID_HANDLE_VALUE == hStdout)
        return EOF;
 
    // Write a null-terminated string to the standard output device.
 
    while (*lpszMsg != '\0')
    {
        fRet = WriteFile(hStdout, lpszMsg, 1, &cchWritten, NULL);
        if( (FALSE == fRet) || (1 != cchWritten) )
            return EOF;
        lpszMsg++;
    }
    return 1;
}
 
#ifdef __cplusplus
}
#endif


На выходе значитс получаю соответственно myputs.dll и myputs.lib.
Далее. Используя, Run-Time Dynamic Linking функция myPuts экспортируется и работает нормально, как и должно быть:
Код

#include <stdio.h> 
#include <windows.h> 
 
typedef int (*MYPROC)(LPTSTR); 
 
VOID main(VOID) 
{ 
    HINSTANCE hinstLib; 
    MYPROC ProcAdd; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 
 
    // Get a handle to the DLL module.
 
    hinstLib = LoadLibrary(TEXT("myputs")); 
 
    // If the handle is valid, try to get the function address.
 
    if (hinstLib != NULL) 
    { 
        ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("myPuts")); 
 
        // If the function address is valid, call the function.
 
        if (NULL != ProcAdd) 
        {
            fRunTimeLinkSuccess = TRUE;
            (ProcAdd) (TEXT("Message via DLL function\n")); 
        }
 
        // Free the DLL module.
 
        fFreeResult = FreeLibrary(hinstLib); 
    } 
 
    // If unable to call the DLL function, use an alternative.
 
    if (! fRunTimeLinkSuccess) 
        printf("Message via alternative method\n"); 
}


Но вот когда используем Load-Time Dynamic Linking:
Код

#include <windows.h> 

int myPuts(LPTSTR);   // a function from a DLL

int main(VOID) 
{ 
    int Ret = 1;

    Ret = myPuts(TEXT("Message printed using the DLL function\n")); 
    return Ret;
}

вылезает ошибка при линковке:
Код

1>test.obj : error LNK2001: unresolved external symbol "int __cdecl myPuts(wchar_t *)" (?myPuts@@YAHPA_W@Z)


Пробовал подключать библиотеку импрота двумя способами:
1. с помощью препроцессорной дерективы #pragma comment(lib, "myputs.lib");
2. присоединял в свойствах проекта в input для линкера.

Все равно выскакивает указанная ошибка.
Либу  импорта пробовал класть в папку проекта, вызывающего dll, а так же в директорию VS\...\lib\.
Ничего не помогает. Даже незнаю что и делать :( :( :(.
У кого была подобная ситуация помогите советом  smile.
PM MAIL   Вверх
ИванМ
Дата 27.2.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



Надо ее объявить 
Код

extern "C" __declspec(dllimport) int myPuts(LPTSTR lpszMsg);

Вместо 
Код

int myPuts(LPTSTR); 


Это сообщение отредактировал(а) ИванМ - 27.2.2009, 20:41
PM MAIL   Вверх
ex386
Дата 27.2.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Теперь пишет что:
Код

1>test.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl myPuts(wchar_t *)" (__imp_?myPuts@@YAHPA_W@Z)

 smile 
PM MAIL   Вверх
ИванМ
Дата 27.2.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



extern "C" поставил вначале?
PM MAIL   Вверх
ex386
Дата 27.2.2009, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Извиняюсь, - слепой   smile, но все равно не помогает, вылетает теперь:
Код

1>test.obj : error LNK2001: unresolved external symbol __imp__myPuts

PM MAIL   Вверх
ИванМ
Дата 27.2.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



в Project->* Properies->Linker->Input->Additional Dependencies напиши  myputs.lib. 
Этот файл должен находиться там же где и файлы cpp
PM MAIL   Вверх
ex386
Дата 27.2.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 27.2.2009

Репутация: нет
Всего: нет



Спасибо помогло !!!  smile 
Хотя пробовал на другом компьютере - не работало.
Может где скосячил.
Вообщем спасибо за подсказки  smile 

Это сообщение отредактировал(а) ex386 - 27.2.2009, 23:10
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.