Как мне вызвать C ++ DLL из проекта C # / WPF

У меня есть следующий код:

namespace WPFMuskTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
[DllImport
("myDll.DLL",
EntryPoint = "?Func1@FUllNameCopiedFromDependancyWalker",
CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl
)
]
public static extern System.IntPtr Func1(out System.IntPtr handle, int type, out  DateTime date);

public MainWindow()
{
InitializeComponent();
//
//
//
}

private void button1_Click(object sender, RoutedEventArgs e)
{
System.IntPtr MainParam;
int thetype = 1
DateTime date;

System.IntPtr res = GetFxIRMoveForDate(out MainParam, thetype _til, out date);
}
}
}

EXE находится в том же пути, что и вызываемая DLL, и функция определенно существует в DLL (проверено в DependacyWalker), но я продолжаю получать ошибку:

Вызываемый прототип функции:

класс __declspec (dllexport) OUR_DATE_TYPE
{
….
}

typedef unsigned long TYPE;
typedef DATE_TYPE OUR_DATE_TYPE;

namespace1
{
namespace2
{
void func1(MyClass &myclass, const TYPE& type, const DATE_TYPE& date);
}
}

Необработанное исключение типа ‘System.AccessViolationException’

Кто-нибудь может сказать мне, почему?

0

Решение

По умолчанию C ++ не использует cdecl Соглашение о вызовах, он использует stdcall, Вы, вероятно, добились бы большего успеха, написав обертку c для API C ++ и вызвав ее вместо этого, потому что C имеет четко определенный ABI.

РЕДАКТИРОВАТЬ: глядя на ваш код снова, я сомневаюсь DateTime совпадает с типом даты, который вы используете в C ++. Если это неправильный размер, например, эта ошибка может произойти.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]