Как исправить обертку C # для C ++?

Я пытаюсь вызвать функцию из DLL. Описание функции в C ++:

BOOL WINAPI PDLCSGetPropertyEx(LPCTSTR lpszProjectName, LPCTSTR lpszPictureName, LPCTSTR lpszObjectName, LPCTSTR lpszPropName, VARTYPE vt, LPVOID pvProp, DWORD dwFlags, LPVOID pData, PCMN_ERROR pError);

В C # я написал:

[DllImport("pdlcsapi.dll", EntryPoint = "PDLCSGetPropertyEx", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Winapi)]
public static extern bool PDLCSGetPropertyEx(
[In] String lpszProjectName,
[In] String lpszPictureName,
[In] String lpszObjectName,
[In] String lpszPropName,
VarEnum vt,
IntPtr pvProp,
[In] UInt32 dwFlags,
[In] IntPtr pData,
[In,Out] [MarshalAs(UnmanagedType.LPStruct)] CMN_ERROR_MANCLASS pError
);

и вызов в приложении:

WinCCODK_PDLCS.CMN_ERROR_MANCLASS errPdl;
errPdl = new WinCCODK_PDLCS.CMN_ERROR_MANCLASS();
IntPtr p = new IntPtr();
String propName = listBox2.SelectedItem.ToString();
String objName = listBox1.SelectedItem.ToString();
bool ret = WinCCODK_PDLCS.CPDLCSWrapper.PDLCSGetPropertyEx(
"C:\\DemoProjectV72_Light\\DemoProjectV72_Light.mcp", "io.pdl", objName
, propName
, VarEnum.VT_I4
, p
, 0
, IntPtr.Zero
, errPdl );
if (ret){
listBox2.Items[listBox2.SelectedIndex] = listBox2.Items[listBox2.SelectedIndex] + val.ToString();
}else{
MessageBox.Show(errPdl.szErrorText);
}

После вызова этой функции приложение падает (появляется стандартное окно Windows, перестала работать программа)

Как передать параметры в функцию?

Другие функции этой библиотеки работают нормально. ,

Я думаю, что не работает правильно с параметрами Вермонт а также PvProp. Они описаны в документации:

Вермонт
Тип данных значения, переданного с помощью pvProp. Допустимые типы определены
в перечислении «VARENUM» в файле включения «wtypes.h»
принадлежность к компилятору. Нет VT_VARIANT, VT_DISPATCH или других
ссылки должны быть использованы.

PvProp
Указатель на тег, в который сохраняется значение свойства. Данные
тип значения определяется vt. Для pvProp вы можете указать любой
значение, определенное для типа данных Variant; обратитесь к содержащимся значениям
в «wtypes.h» включите файл, принадлежащий вашему компилятору. Для типов
которые имеют буфер (например, BSTR), буфер выделяется
функция и должна быть впоследствии очищена вызывающим приложением.

0

Решение

Задача ещё не решена.

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

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

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