导出具有相同签名的函数

时间:2015-03-22 20:37:41

标签: c++

我正在尝试从C ++ dll导出相同签名的两个函数。由于我不希望名字被破坏,我使用的是extern "C"。但是,当我在依赖walker中打开一个dll时,我可以看到两个函数的入口点是相同的,任何想法为什么?

代码如下: Header.h

#pragma once

extern "C"
{
    void _cdecl TestFunc1();
    void _cdecl TestFunc2();
}

Header.cpp

#include "Header.h"

void TestFunc1()
{
    int i = 0;
}

void TestFunc2()
{
    int i = 0;
}

模块定义文件:

EXPORTS
    TestFunc1
    TestFunc2

这是我在dependecy walker中得到的 enter image description here

1 个答案:

答案 0 :(得分:0)

在visual studio中,设置Linker - >优化 - >启用COMDAT折叠到否(/ OPT:NOICF)工作。 Here MSDN说:

Because /OPT:ICF can cause the same address to be assigned to different functions or read-only data members (const variables compiled by using /Gy), it can break a program that depends on unique addresses for functions or read-only data members. For more information, see /Gy (Enable Function-Level Linking).

需要阅读更多关于此链接器标志的确切内容。