Как я могу установить точку входа для DLL - PullRequest
10 голосов
/ 04 октября 2011

Сначала я думал, что точка входа в dll DLLMain, но затем, когда я пытаюсь импортировать ее в C #, я получаю сообщение об ошибке, что точка входа не найдена. Вот мой код:

#include <Windows.h>

int Test(int x,int y)
{
    return x+y;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        MessageBox(0,L"Test",L"From unmanaged dll",0);
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
} 

Как я могу установить точку входа для моей DLL? И если вы не возражаете, не могли бы вы дать мне небольшое объяснение о точке входа?

Как я должен снова установить импорт той же самой DLL и изменить точку входа, чтобы я мог использовать другие функции в той же самой DLL? заранее спасибо.

1 Ответ

12 голосов
/ 04 октября 2011

В вашем примере кажется, что вы хотите, чтобы Test () была точкой входа, но вы не экспортируете ее. Даже если вы начнете экспортировать его, он может не работать должным образом с именем C ++ «украшение» (искажение). Я бы предложил переопределить вашу функцию следующим образом:

extern "C" __declspec(dllexport) int Test(int x,int y)

Компонент extern "C" удалит искажение имени в C ++. Компонент __declspec(dllexport) экспортирует символ.

Подробнее см. http://zone.ni.com/devzone/cda/tut/p/id/3056.

Редактировать: Вы можете добавить столько точек входа, сколько захотите. Вызывающий код просто должен знать имя символа для извлечения (и если вы создаете статический .lib, который позаботится об этом за вас).

...