2011-01-27 1 views
1

Я имею в C++:C++ экспортируется в DLL и загружаются из C#

недействительным __declspec (dllexport) Foo (HWND Wnd)

И в C#

[DllImport("MyDll.dll", CharSet = CharSet.Ansi)] 
public static extern void foo(IntPtr wnd); 

Когда я пытаюсь это назвать, у меня есть эта ошибка - Дополнительная информация: Не удалось найти точку входа с именем ' foo 'в DLL. Я пытался проверить DLL и у меня есть функция с определением парование:

недекорированного C++ Функция: аннулируются Cdecl Foo (структура HWND *)

Я искал на нескольких форумах и кажется, что это правильный способ сделать это ... Знаете ли вы, почему у меня такая ошибка времени выполнения?

+0

Проверьте мой вопрос, может быть, поможет! http://stackoverflow.com/q/4108181/375958 – Jalal

ответ

4

Вам необходимо отключить управление именем C++. Объявить родную функцию, как это:

extern "C" __declspec(dllexport) void foo(HWND wnd) 

Вы можете использовать dumpbin.exe утилиту, чтобы увидеть экспорта DLL, а также.

+0

Он работает, спасибо! Я отвечу на ответ за 11 минут: P – Felics

+0

+1. Пока вы можете его изменить, это путь. –

+0

Рад помочь. И да, если у вас нет источника, становится немного более болезненным, но, поскольку вы это делаете, я бы не стал беспокоиться об этом на данный момент. Тем не менее, я бы поискал «C++ name mangling», чтобы вы знали, что на самом деле происходит здесь. Я бы не удалял ваш ответ Адаму, как вы правы, в случае, когда редактирование источника не является вариантом. –