Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何设置dll的入口点_C++_Winapi_Dll_Dllimport - Fatal编程技术网

C++ 如何设置dll的入口点

C++ 如何设置dll的入口点,c++,winapi,dll,dllimport,C++,Winapi,Dll,Dllimport,首先,我认为入口点在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, LPVO

首先,我认为入口点在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;
} 
#包括
整数测试(整数x,整数y)
{
返回x+y;
}
BOOL APICENT DllMain(模块HMODULE,
德沃德·乌尔打电话的理由,
LPVOID lpReserved
)
{
开关(ul\u呼叫原因\u)
{
案例DLL\u进程\u附加:
MessageBox(0,L“测试”,L“来自非托管dll”,0);
案例DLL\u线程\u连接:
案例DLL\u线程\u分离:
案例DLL\u进程\u分离:
打破
}
返回TRUE;
} 
如何设置dll的入口点?若你们不介意的话,你们能给我一点关于入口点的解释吗


比如,我必须再次设置导入同一个dll并更改入口点,以便在同一个dll中使用其他函数吗?提前感谢。

在您的示例中,似乎您打算将Test()作为一个入口点,但是您没有导出它。即使你开始导出它,它也不能用C++名字“装饰”(Mangle)正常工作。我建议将您的功能重新定义为:

extern "C" __declspec(dllexport) int Test(int x,int y)
<> >代码>外部“C”<代码>组件将删除C++名称的修改。
\uu declspec(dllexport)
组件导出符号

有关更多详细信息,请参阅


编辑:您可以通过这种方式添加任意数量的入口点。调用代码只需知道要检索的符号的名称(如果您正在创建一个static.lib,它会为您处理)。

在C声明中使用u stdcall或在C声明中调用convention.Cdecl。