Есть библиотека CheckUfa.dll В справке разработчика написано, что подключать, нужные мне функции, к Delphi проекту вот так:
function CheckFile(fname,reportName,typRep:PChar;fox:integer):integer; StdCall;
function CheckFile2(fname,typRep:PChar;Precheck:integer):WideString; StdCall;
function CheckFile3(fname,reportName,typRep:PChar;fox:integer):wideString; StdCall;
Менял LPStr, LPWStr. Убирал и ставил разные MarshalAs. IntPtr. Ничего.
Один из примеров того, что пробовал (касаемо CheckFile2):
[DllImport(@"D:\CheckUfa.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static extern IntPtr CheckFile2(
[MarshalAs(UnmanagedType.LPWStr)]
StringBuilder fname,
[MarshalAs(UnmanagedType.LPWStr)]
StringBuilder typRep,
[MarshalAs(UnmanagedType.I4)]
int Precheck);
...
StringBuilder sb1 = new StringBuilder(...
StringBuilder sb2 = new StringBuilder(...
return Marshal.PtrToStringUni(CheckFile2(sb1, sb2, 0));
...
Спасибо всем, за помощь.
Подведу итог. Компилятор в Delphi преобразует функцию в процедуру. Именно поэтому в C# нужно использовать void, и out переменную result.
PChar успешно получилось импортировать только в IntPtr, остальные типы были с ошибками.
Нужная мне функция CheckFile2 в тоге заработала вот так:
[DllImport(@"D:\CheckPfr\CheckUfa.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, EntryPoint = "#2")]
public static extern void CheckFile2(
[MarshalAs(UnmanagedType.BStr)]
out string result,
IntPtr fname,
IntPtr typRep,
[MarshalAs(UnmanagedType.I4)]
int Precheck);
Обратите внимание, что по своей сути fname это строка, поэтому вызывая CheckFile2 я использовал Marshal
CheckFile2(out result, Marshal.StringToBSTR(fname), Marshal.StringToBSTR(typRep), 0);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день, вопрос такойЕсть Chart обычного вида и когда на точку наводится курсор, то отображается плашка с координатами
Добрый день! Не могу понять как сделать в WPF привязку видимости элемента(Кнопки) к CheckBox'у(видно/не видно), как это можно сделать?