![](/img/trans.png)
[英]How to not create .lib and .exp files in Visual C++ .exe project
[英]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中的確切規范),或者動態地加載庫和函數-請參見LoadLibrary和GetProcAddress 。
要查看dll中的確切功能規范,可以使用DependencyWalker (外部工具),也可以直接使用Visual Studio提供的dumpbin實用工具:
dumpbin /exports thename.dll
這將顯示所有出口。
特別要注意調用約定(stdcall,fastcall等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.