Что такое .NET эквивалентно TApplication или как вызывать этот Dll в .NET Managed Code? - PullRequest
0 голосов
/ 24 октября 2011

Вот код cpp для вызова функции dll "

typedef void (__stdcall *Terminal)(TApplication*, TFileStream *k, HANDLE N, int D);

Вот мой код C # для вызова функции"

[DllImport("somedll.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
static extern void terminal(IntPtr Application, IntPtr FileStream, IntPtr CommHandle, int mode);

и вызова функции:

terminal(IntPtr.Zero, FileHandle.DangerousGetHandle(), CommHandle, 0);

если я вызываю терминал с приложением ptr, установленным в this.Handle, я получаю исключение System.AccessViolationException. Сообщение = Попытка чтения или записи в защищенную память.Это часто указывает на то, что другая память повреждена.

1 Ответ

2 голосов
/ 24 октября 2011

Вы не можете создать Delphi TApplication из .net. Вы не можете создать Delphi TFileStream из .net. Эта DLL-библиотека недоступна для чего-либо кроме Delphi или C ++ Builder.

Единственный способ, которым вы могли бы надеяться, что он будет работать из .net, - это если бы DLL также экспортировала функции, создавшие экземпляры TApplication или TFileStream, которые затем можно было бы передать функции в вашем вопросе.

Класс TApplication - это класс VCL, представляющий приложение. Это эквивалент класса WinForms Application. Точно так же TFileStream - это ввод-вывод файла обертки класса VCL в потоковом интерфейсе. Класс .net FileStream аналогичен. Но вы просто не можете синтезировать рабочие экземпляры классов Delphi / VCL из .net.

...