制作VC ++ .exe到DLL。它可能吗?

时间:2011-03-27 09:17:59

标签: c++ visual-c++ dll win32-process

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

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

  1. 我想链接项目1和project2
  2. 项目2应该能够调用project1的功能(这是一个exe currentnlty)
  3. 修改 嗨,大家好,感谢您的意见。我告诉您们的意见。即便如此,我的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)
    {
    ....
    ..
    }
    

1 个答案:

答案 0 :(得分:2)

您需要使用__declspec dllexport关键字导出您要访问的功能。

因此,如果将清单常量'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-linkage。这将使导出的名称与代码中使用的名称相同。

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