【发布时间】:2013-05-31 22:21:23
【问题描述】:
我在 MV C++ 2012 中创建了一个 DLL,当我使用
Dumpbin /Exports filename
DLL 文件中的函数名称内部有一个等号。我不得不使用 公共语言运行时支持 (/crl),因为我使用了 C# 中的 DLL。这就是为什么函数的名称会显示等号的原因吗?我的头文件:
#ifdef ColorDLL_EXPORTS
#define ColorDLL_API __declspec(dllexport)
#else
#define ColorDLL_API __declspec(dllexport)
#endif
extern "C"{
ColorDLL_API int ColorSelect(int i);
}
ColorDLL.cpp
#include "stdafx.h"
#include "ColorDLL.h"
#using <ColorDiologeClass.dll>
extern "C"{
ColorDLL_API int ColorSelect(){
ColorDiologeClass::Class1::ColorReturn(1);
return 1;
}
} 当我使用 Dumpbin 时,名称显示如下:
Name
ColorSelect = _ColorSelect
这是为什么?我希望它显示为 ColorSelect,而不是 ColorSelect = _ColorSelect。如果我这样离开它,我将如何从需要确切函数名称的 JMP 之类的程序中调用此函数?会是 ColorSelect 吗?还是 ColorSelect = _ColorSelect?
【问题讨论】:
-
不要修复它,这是一件好事。当您更改 C++ 代码时,它可以防止 C# 程序死于可怕的死亡。只需使用 [DllImport] 属性中的 EntryPoint 属性即可。再说一次,当您使用 /clr 编译时,根本不需要这样做。只需创建一个公共 ref 类。
-
为函数创建一个公共类,它会修复装饰?
-
你说不要修。但是如果是装饰的,我怎么能在MV之外使用这个功能呢?