Страница 1 из 1

Вызов Cstring ClarionDll из шарпа

Добавлено: 07 Март 2012, 13:38
seawolf
Коллеги, много раз дела clarion Dll и всегда проблем с принятием вызова адреса строки из C++ или Delphi не было (вызов описывается двумя параметрами размер и адрес) Сейчас dll пытаются дернуть из Шарпа и дело не идет кусок кода даю:

[DllImport("TgtLicGen.dll", CharSet=CharSet.Ansi, CallingConvention = CallingConvention.Cdecl, ExactSpelling=true, EntryPoint="TGTLG_OPENPOSTDB")]
private static extern int TGTLG_OpenPostDb([MarshalAs(UnmanagedType.LPStr)] ref StringBuilder str);

static void Main(string[] args)
{
StringBuilder path = new StringBuilder(@"e:\WORK\TGT\tgtLicGen_06032012\TGTMAILSERVERPOST.TPS", 512);
int success = TGTLG_OpenPostDb(ref path);
Console.WriteLine(success);
Console.WriteLine(path);


На Clarion функция которую вызывают такая - TGTLG_OpenPostDb(*CSTRING),LONG,PASCAL
Я с шарпом пока не знаком так что кто поможет подружить нас? Меня смущает TGTLG_OpenPostDb(ref path) дается один параметр строки

Re: Вызов Cstring ClarionDll из шарпа

Добавлено: 07 Март 2012, 14:30
Andrew Listiev
[DllImport("TgtLicGen.dll", CharSet=CharSet.Ansi, CallingConvention = CallingConvention.Cdecl, ExactSpelling=true, EntryPoint="TGTLG_OPENPOSTDB")]
private static extern int TGTLG_OpenPostDb([MarshalAs(UnmanagedType.LPStr)] ref StringBuilder str);
TGTLG_OpenPostDb(*CSTRING),LONG,PASCAL
Разница с конвенции

Re: Вызов Cstring ClarionDll из шарпа

Добавлено: 07 Март 2012, 22:05
seawolf
а можно мне подробнее сказать чего там надо написать в конвенции на шарпе?

Re: Вызов Cstring ClarionDll из шарпа

Добавлено: 07 Март 2012, 23:42
Дед Пахом
CallingConvention.StdCall