gpt4 book ai didi

c++ - 制作一个 VC++ .exe 到 DLL 。这可能吗?

转载 作者:行者123 更新时间:2023-11-30 04:35:16 26 4
gpt4 key购买 nike

我有一个编译成 EXE 的 VC++ win 32 应用程序。但现在我想将它转换为 dll,以便我可以将其加载到另一个应用程序中。我尝试将 Visual Studio 属性从 .EXE 更改为 .DLL 成功转换它但是当我使用 GetProcAddress 它总是返回 NULL 。我不确定我在做什么是对还是错。

基本上这就是我想要实现的目标:

  1. 我想链接项目 1 和项目 2
  2. 项目 2 应该能够调用项目 1 的功能(这是一个 exe 当前)

编辑大家好,感谢您的意见。我告诉了你们所说的。即使那样我的 GetProcAddress 也返回零。我做错了什么吗?下面显示了我的 dll 加载代码。

HINSTANCE LoadMe  =  LoadLibrary( _T("D:\\VC++Project\\CVAList\\CVAList\\ExportTest.dll"));

if (LoadMe != 0)
printf("LoadMe library loaded!\n");
else
printf("LoadMe library failed to load!\n");


EntryPointfuncPtr LibMainEntryPoint;
LibMainEntryPoint = (EntryPointfuncPtr)GetProcAddress(LoadMe,"PrintFloatsVal");
LibMainEntryPoint (a1 ,a,b,c,d ); // 4 double

编辑 DLL 导出代码

#define DllExport   __declspec( dllexport ) 


DllExport void PrintFloatsVal ( int amount, double &d1 ,double &d2 , double &d3 ,double &d4)
{
....
..
}

最佳答案

您需要使用 __declspec dllexport 关键字导出您希望访问的函数。

因此,如果您将 list 常量 'BUILDING_MY_DLL' 添加到项目中,则声明您关心的函数的头文件既可以在 DLL 项目中使用,也可以在使用该 DLL 的任何代码中使用:

#ifdef BUILDING_MY_DLL
#define MY_DLL_EXPORT __declspec dllexport
#else
#define MY_DLL_EXPORT __declspec dllimport
#endif

然后装饰你想导出的函数:

MY_DLL_EXPORT BOOL Func1(int a);

如果您希望访问的函数是用 C++ 实现的,那么出于函数重载和其他目的,它会被修饰,并且最好像访问任何其他函数一样直接访问它。但是,如果您希望使用 GetProcAddress(),您最好通过使用 extern "C"{ ... } 包围函数来为其提供 C 链接。这将使导出的名称与代码中使用的名称相同。

引用:http://msdn.microsoft.com/en-us/library/a90k134d(v=vs.80).aspx

关于c++ - 制作一个 VC++ .exe 到 DLL 。这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5448282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com