簡體   English   中英

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

[英]how to use unmanaged .dll, .lib, .exp in c++ project

我不在這里,所以我希望有人可以給我一些建議。

長話短說,我從一個jar開始,我運行了一個名為ikvm的應用程序以生成我的Java類的.net庫。 經過測試,效果很好。 因此,我有了一個.net dll,我使用mono aot生成了一個非托管的.dll,.exp和.lib,但沒有頭文件。 我確實知道所涉及的類名和方法。

現在我不知道的是,在沒有頭文件的情況下,如何使用這些文件在c ++項目中使用這些類。 我正在使用Visual Studio。 如果我錯過了任何有用的信息,請發表評論。

如果您有未管理的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);
      }

   }

}

如果沒有頭文件,則需要“制造”一個頭文件(根據.dll中的確切規范),或者動態地加載庫和函數-請參見LoadLibraryGetProcAddress

要查看dll中的確切功能規范,可以使用DependencyWalker (外部工具),也可以直接使用Visual Studio提供的dumpbin實用工具:

dumpbin /exports thename.dll

這將顯示所有出口。

特別要注意調用約定(stdcall,fastcall等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM