【问题标题】:How can i set an entrypoint for a dll如何为 dll 设置入口点
【发布时间】:2011-11-30 21:18:50
【问题描述】:

首先我认为 dlls 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 中使用其他功能?提前致谢。

【问题讨论】:

    标签: c++ winapi dll dllimport


    【解决方案1】:

    在您的示例中,您似乎打算将 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,它会为您处理它)。

    【讨论】:

    • 在 C 声明中使用 __stdcall 或在 C# 声明中使用 CallingConvention.Cdecl。
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多