2015-03-22 20 views
0

Я пытаюсь экспортировать две функции одной и той же сигнатуры из dll C++. Поскольку я не хочу, чтобы имена были искалечены, я использую extern "C". Однако, когда я открываю dll в walker, я вижу, что точки входа для обеих функций одинаковы, любая идея почему?Экспорт функций с одинаковой синхронностью

код, как показано ниже: 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; 
} 

Модуль файл Defination:

EXPORTS 
    TestFunc1 
    TestFunc2 

Это то, что я получил в ходунки зависимые пакеты enter image description here

+0

Либо что-то не связано с вашим опубликованным кодом, либо у вас очень худой оптимизатор. Это происходит независимо от содержания функций? – WhozCraig

+1

Я бы попытался использовать разные определения для 'TestFunc1' и' TestFunc2', на всякий случай, если есть схема скрытого оптимизатора, которая проверяет дубликаты и ссылки на первое появление. –

+0

Я использую визуальную студию 2013 – Neo

ответ

0

В визуальной студии настройки Linker -> Optimization -> Включено COMDAT Folding to No (/ 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).

нужно читать больше, что этот флаг линкер делает точно.

Смежные вопросы