gpt4 book ai didi

c++ - 使用 "::"字符串名称在 C++ 中调用 DLL 导出

转载 作者:行者123 更新时间:2023-11-28 04:14:26 25 4
gpt4 key购买 nike

我有一个函数名称为“Test123::MyFunction”的外部 DLL 文件,这里的问题是如果名称不包含“::”字符,我可以成功调用 DLL 名称,我如何传递完整的函数在 DLL 调用中命名“Test123::MyFunction”?

完整源代码:

#include "pch.h"
#include <stdio.h>
#include <Windows.h>
#include <iostream>
int MyFunction(char* buf);
int main(int argc, char** argv)
{
/* get handle to dll */
HINSTANCE hGetProcIDDLL = LoadLibrary(L"CallMe.dll");

/* get pointer to the function in the dll*/
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE(hGetProcIDDLL), "MyFunction"); // Here the name MyFunction should be Test123::MyFunction

typedef int(__stdcall * pICFUNC)(char *);

pICFUNC MyFunction;
MyFunction = pICFUNC(lpfnGetProcessID);

/* The actual call to the function contained in the dll */
int intMyReturnVal = MyFunction(argv[1]);

/* Release the Dll */
FreeLibrary(hGetProcIDDLL);

return intMyReturnVal;

/* The return val from the dll */

}

谢谢

最佳答案

在 Visual C++ 安装中,应该有一个名为 dumpbin.exe 的小实用程序。如果将它扔到 C++ DLL 中,您应该能够列出已导出的 C++ 方法的损坏名称。这是您要传递给 GetProcAddress 的那些文本名称。

然而,大多数人会通过简单地执行以下操作来禁用导出函数的名称重整:

extern "C" void __declspec(dllexport) startPicadorVisual(string fixtureNamet);
extern "C" PicadorResults __declspec(dllexport) getPicadorReading(string fixtureName);

这会将函数的名称导出为“startPicadorVisual”和“getPicadorReading”。注意:当使用 C 命名约定导出函数时,这意味着您将无法使用函数重载(因为这两个函数将以相同的名称结束)。

关于c++ - 使用 "::"字符串名称在 C++ 中调用 DLL 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56962004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com