我有一个用C ++编写一个DLL,我想打压名字改编几个导出的方法。该方法是全局的,不属于任何类的成员。有没有一种方法来实现这一目标?

顺便说一句:我使用VS2008。

有帮助吗?

解决方案

“bradtgmurray”是正确的,但对于Visual C ++编译器,你需要明确反正导出功能。而利用提出了通过DEF文件“赛尔吉 - appTranslator”是错误的方式做到这一点。

什么是出口上的Visual C符号的普遍方式++?

使用declspec(DLLEXPORT / dllimport的)指令,其工作方式为C和C ++代码,装饰或不(然而,所述.DEF被限制为C除非你想装饰手工您的代码)。

因此,以正确的方式来导出在Visual C ++是组合所述出口“C”成语,由“bradtgmurray”作为回答未修饰的功能,和dllimport的/ DLLEXPORT关键字。

一个例子

作为一个例子,我上的Visual C ++一个空DLL项目创建,并写了两个函数,一个被称为CPP,因为它被装饰,而另一个C,因为它不是。该代码是:

// Exported header
#ifdef MY_DLL_EXPORTS
#define MY_DLL_API __declspec(dllexport)
#else
#define MY_DLL_API __declspec(dllimport)
#endif

// Decorated function export : ?myCppFunction@@YAHF@Z
MY_DLL_API int myCppFunction(short v) ;

// Undecorated function export : myCFunction
extern "C"
{
MY_DLL_API int myCFunction(short v) ;
} ;

我想你已经知道了,但为完整起见,在MY_DLL_API宏是,但不是由DLL用户在DLL生成文件(即VCPROJ)被定义。

在C ++代码很容易编写的,但为了完整性起见,我将它下面写:

// Decorated function code
MY_DLL_API int myCppFunction(short v)
{
   return 42 * v ;
}

extern "C"
{

// Undecorated function code
MY_DLL_API int myCFunction(short v)
{
   return 42 * v ;
}

} ;

其他提示

环绕与外部的 “C” 函数定义{}

extern "C" {
    void foo() {}
}

请参阅 http://www.parashift.com /c++-faq-lite/mixing-c-and-cpp.html

可以使用.DEF文件与导出部分避免对导出的函数所有manglings(C ++,CDECL,STDCALL,...)。只要创建一个MYDLL.DEF文件并将其添加到您的项目:

LIBRARY "MyDLL"
EXPORTS
  Foo
  Bar

其实,机会是向导已经创建DEF文件为您服务。你只需要填写导出部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top