DllImport Неуправляемый, не .NET Dll в .NET проект, представляющий Char * и Void __StdCall - PullRequest
2 голосов
/ 26 февраля 2010

У меня есть DLL не .net и неуправляемая, написанная на Borland C ++, которую мне нужно импортировать. Он возвращает void и имеет идентификатор __stdcall для функции. Это также требует прохождения char *. Когда я пытаюсь добавить его в качестве ссылки на мой проект в VS 2005, он возвращает ошибку неверной сборки.

Как я могу сделать это в C #?

Это то, что у меня сейчас есть и не работает:

[DllImport ("Project1.dll", CallingConvention=CallingConvention.StdCall)]
    public static extern IntPtr CustomerForm
        (String caption);

Ответы [ 2 ]

1 голос
/ 26 февраля 2010

Для неуправляемой DLL вы не добавляете ее в качестве ссылки. Убедитесь, что бинарная DLL-библиотека находится в той же папке, что и сборка, в которой обычно находится проект .NET EXE: {project} \ bin \ debug.

Также убедитесь, что у вас был файл .DEF для экспорта при сборке неуправляемой DLL с Borland C ++.

Edit:

LIBRARY Project1
EXPORTS
    CustomerForm

А в исходном коде Borland C ++ убедитесь, что функция объявлена ​​как экспорт, например:

#ifdef __cplusplus
__declspec(dllexport) void CustomerForm(char *s);
#endif

Использование этого параметра гарантирует, что функция может быть экспортирована и может быть связана!

Убедитесь, что подпись вашего атрибута DllImport совпадает с подписью вашего нативного C ++ Dll, т. Е.

[DllImport ("Project1.dll", CallingConvention=CallingConvention.StdCall)]
    public static extern void CustomerForm(string caption);

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 26 февраля 2010

Чтобы использовать DllImport, вам не нужно добавлять ссылку на dll, просто поместите dll рядом с исполняемым файлом или в system32, и он должен работать.

...