Автор вопроса: Progos | Web-сайт:html-expert.org.ru | ICQ: 311715784
Вот DLL на Си
#include "stdafx.h"
#include "testing.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// This is an example of an exported variable
TESTING_API int nTesting=0;
// This is an example of an exported function.
TESTING_API int fnTesting(void)
{
return 42;
}
Объявляю из VB Private Declare Function fnTesting lib "testing.dll" () as long
Вызываю fnTesting
DllMain вызывает, а на fnTesting пишет не найдена точка входа.
Что не так?
Во-первых, что за тип такой: TESTING_API?
Во-вторых, функция fnTesting должна быть _stdcall:
int _stdcall fnTesting(void)
В-третьих, проверь, экспортируется ли эта ф-ция (т.е. указана она как EXPORTS fnTesting в файле .def)
Не знаю, чем ты там делаешь dll, я компилирую и линкую из командной строки.
Создаёшь файл testing.def, указываешь в нём имена экспортируемых ф-ций, и имя файла указывается линкеру, чтобы он знал, что включить в таблицу экспорта
.cpp:
#include <windows.h>
//=======================================================================
int _stdcall fnTesting(void)
{
return 42;
}
//=======================================================================
int DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE;
}
Файл testing.def:
LIBRARY testing
EXPORTS fnTesting
Компилирую так:
cl /LD /Ox testing.cpp
Линкую с ключом /def:
link /subsystem:windows /dll /def:testing.def testing.obj