如何为dll设置入口点?

How can i set an entrypoint for a dll

本文关键字:入口 设置 dll      更新时间:2023-10-16

首先我认为在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中使用其他函数?

在您的示例中,似乎您打算Test()作为入口点,但您没有导出它。即使您开始导出它,它也可能无法正确地使用c++名称"装饰"(mangling)。我建议将你的职能重新定义为:

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,它会为您处理它)。