[英]Using a C++ DLL with mangled exports
我被分配了以DLL形式圍繞現有C ++代碼庫編寫包裝器的工作。 我正在運行的問題是DLL導出名稱已損壞。 將名稱傳遞給GetProcAddress時,是否可以/應該僅使用變形的名稱? 還是有更好的做事方法?
編輯:我沒有提及。 我無權訪問代碼,以便允許我以任何方式修改dll。
EDIT2:事實證明我確實可以訪問此DLL的代碼(.h和.cpp),但我無法修改所述代碼。
由於您擁有源代碼(不可修改)。
用DLL源代碼文件創建一個項目。 使用以下命令創建wrapper.cpp / wrapper.h
// wrapper.h
#ifndef WRAPPER_H
#define WRAPPER_H
extern "C" {
void wrapper_function1();
// and so on
}
#endif
// wrapper.cpp
#include "wrapper.h"
#include "dll.h"
extern "C" {
void wrapper_function1() { /* code which may call functions from dll.h */ }
// And so on
}
因此,您的新DLL沒有名稱修改。
我最終針對我提出的具體問題解決的解決方案是以下功能。 在我的案例中,這很有用,因為出口名稱只被稍微弄亂了。
static FARPROC getFunctionPointer(HINSTANCE dll, const char *baseName)
{
char buf[256];
FARPROC fp;
sprintf(buf,"%s",baseName);
fp = GetProcAddress(dll,buf);
if (fp == 0)
{
sprintf(buf,"_%s",baseName);
fp = GetProcAddress(dll,buf);
}
if (fp == 0)
{
sprintf(buf,"_%s@4",baseName);
fp = GetProcAddress(dll,buf);
}
if (fp == 0)
{
sprintf(buf,"_%s@8",baseName);
fp = GetProcAddress(dll,buf);
}
if (fp == 0)
{
sprintf(buf,"_%s@0",baseName);
fp = GetProcAddress(dll,buf);
}
if (fp == 0)
{
printf("ERROR: Could not locate function: %s \n", baseName);
}
return fp;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.