2012-07-28 2 views
7

Очень сложно найти в Google темы для C, потому что я продолжаю находить результаты, имеющие отношение к C# или C++, но не C, поэтому, возможно, кто-то может дать мне быстрый, простой ответ. Как я могу использовать функции в DLL в C без LIB-файла, чтобы пойти с ним? Я знаю все прототипы функций и их имена.Использование DLL в C без lib

Заранее благодарен!

+0

Я чувствую, ты, братан! C больше уходит на задний план. – displayname

ответ

8

Да, вы можете. Вы должны использовать функцию GetProcAddress, чтобы вызвать функцию непосредственно в DLL, без привлечения LIB

процессы явно ссылается на GetProcAddress DLL вызова, чтобы получить адрес экспортированной функции в DLL. Вы используете возвращаемый указатель функции для вызова функции DLL.

Процитируем пример из приведенной выше ссылке:

typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT); 
... 

HINSTANCE hDLL;    // Handle to DLL 
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer 
DWORD dwParam1; 
UINT uParam2, uReturnVal; 

hDLL = LoadLibrary("MyDLL"); 
if (hDLL != NULL) 
{ 
    lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, 
              "DLLFunc1"); 
    if (!lpfnDllFunc1) 
    { 
     // handle the error 
     FreeLibrary(hDLL); 
     return SOME_ERROR_CODE; 
    } 
    else 
    { 
     // call the function 
     uReturnVal = lpfnDllFunc1(dwParam1, uParam2); 
    } 
} 
+2

Это то, что я собираюсь сделать. Я расскажу вам о моем опыте, когда этот проект окончен. Я пытаюсь дистанционно управлять старой графикой Winradio 3000 series, работающей на старом компьютере. Мой папа хочет иметь возможность использовать его везде, где он есть, и, похоже, считает, что дистанционное управление волшебным образом будет легко сделать. Ну, теперь у меня есть передача музыки с одного компьютера на другой, так что есть начало, теперь мне нужно только реализовать элементы управления с DLL, которая поставляется с winradio, и волшебный пульт дистанционного управления моего отца будет закончен. –

+0

О, и тогда мне нужно сделать пользовательский интерфейс, я полагаю ... –

+0

Да, это работает очень хорошо! Ничего. Документация для Winradio API была немного запутанной (DWORD в своем мире, по всей видимости, беззнакома). Кроме этого это было очень легко. Огромное спасибо! –

3

Вы можете использовать LoadLibrary() и GetProcAddress(), как описано в ответе по DarkXphenomenon. Или еще одна альтернатива - создать свою собственную библиотеку импорта для DLL, создав файл .def, затем выполнив это с помощью команды LIB для создания библиотеки импорта. Дополнительные подробности здесь:

http://support.microsoft.com/kb/131313

Смежные вопросы