[英]How to use a C++ class dll loaded explicitly in visual studio
正是出於此處提到的原因: http : //msdn.microsoft.com/zh-cn/library/vstudio/253b8k2c.aspx
“應用程序不知道運行時將要加載的DLL的名稱”
我需要加載一個不將其名稱綁定到應用程序的dll。 也就是說, 我不需要該應用程序要求“ myDll.dll”正常工作(因為在我們的配置系統中,myDll.dll的名稱並非如此) 。 但是,對每個函數使用GetProcAddress似乎不是一個好主意,特別是因為它需要修飾的名稱,並且容易出錯。
我想知道是否有一種方法可以繼續使用__declspec(dllimport)或類似的方法而無需dll名稱綁定。
我的最后一招是創建一個C接口和一個使用GetProcAddress的類,但我認為應該有更好的方法。
編輯:
我應該注意,我可以編輯庫的.cpp和.h,創建.lib等。
我什至可以(但是這是非常特定於此應用程序的)創建dll中包含的類的對象(為此我們有一些鈎子)。 但是,我無法使用dll類的標頭,因為這要求我加載“ myDll.dll”
使用dumpbin程序列出導出的符號:
dumpbin /exports OLDNAME.dll
您將獲得這種輸出:
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file OLDNAME.dll
File Type: DLL
Section contains the following exports for OLDNAME.dll
00000000 characteristics
529B7ABB time date stamp Sun Dec 01 19:06:51 2013
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00011109 ?MtDlladd@@YAHHH@Z = @ILT+260(?MtDlladd@@YAHHH@Z)
Summary
1000 .data
1000 .idata
2000 .rdata
1000 .reloc
1000 .rsrc
4000 .text
10000 .textbss
現在,創建一個具有以下內容的新文本文件:
LIBRARY NEWNAME
EXPORTS
?MtDlladd@@YAHHH@Z
將NEWNAME替換為有問題的DLL的最終名稱。 在EXPORTS下,照原樣復制implib給定的所有函數名稱。 將該文本文件命名為NEWNAME.DEF
使用lib
使用該DEF文件創建一個新的lib文件:
lib /def:NEWNAME.DEF /OUT:NEWNAME.lib
現在,您可以鏈接到該lib,並且您的應用程序將需要NEWNAME.DLL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.