如何在c ++项目中使用非托管的.dll,.lib,.exp

时间:2017-06-20 15:50:36

标签: c++ .net dll mono native

我离开了我的联盟,所以我希望有人可以就如何继续给我一些建议。

长话故事是,我从一个jar开始,我运行了一个名为ikvm的应用程序来生成我的java类的.net库。经过测试,工作正常。那么我有一个.net dll,我使用mono aot生成一个非托管的.dll,.exp和.lib但没有头文件。我知道所涉及的类名和方法。

现在我无法弄清楚我是如何使用这些文件在没有头文件的c ++项目中使用这些类的。我正在使用visual studio。如果有任何我错过的信息会有所帮助,请发表评论。

2 个答案:

答案 0 :(得分:1)

如果你有一个无人的DLL,那么有很多方法可以使用它c ++。

一种简单的方法是使用LoadLibrary()& GetProcAddress()函数。例如:

//Define the function prototype
typedef int (CALLBACK* FirstFunction)(LPCTSTR);

void main()
{
   HINSTANCE dllHandle = NULL;              
   FirstFunction pFirstFunction = NULL;

   //Load DLL
    dllHandle = LoadLibrary("Your.dll");

   if(dllHandle != NULL)
   {
      //Get pointer to function FindBook
      pFirstFunction = (FirstFunction)GetProcAddress(dllHandle,
         "FindBook");

      // If function pointer is valid then you can use it 
      if (pFirstFunction != NULL)
      {
         LPCTSTR strBook = "Duchamp";
         short nSuccessCode = pFirstFunction(strBook);
      }

   }

}

答案 1 :(得分:0)

如果您没有头文件,则需要"制造"一个(根据.dll中的确切规范),或动态加载库和函数 - 请参阅LoadLibraryGetProcAddress

要查看dll中的确切功能规格,您可以使用例如DependencyWalker(外部工具)或直接由Visual Studio提供的dumpbin实用程序:

dumpbin /exports thename.dll

这将显示开始的所有出口。

特别要注意调用约定(stdcall,fastcall等)。