簡體   English   中英

如何使用Visual Studio中顯式加載的C ++類dll

[英]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.

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