Использование COM-DLL в delphi - нарушение прав доступа в ошибке MSVCR80D.dll
Мне нужно использовать DLL, созданную с помощью .NET framework. Эта DLL становится видимой для COM.
Я хочу использовать эту DLL в приложении, созданном с помощью Delphi 2006. Я выполнил следующие шаги:
- Зарегистрировал DLL с помощью regscr32.
Импортировал библиотеку типов с помощью Delphi IDE. Он создал файл _TLB.pas. Следующая подпись была создана в файле TLB.
функция TValidationRequest.Process (var meterBSN: WideString; var NICSerial: WideString; var partNumber: WideString; var otherConfig: WideString; из returnMessage: WideString): Smallint; начинать Результат: = DefaultInterface.Process (meterBSN, NICSerial, partNumber, otherConfig, returnMessage); конец;
Я попытался вызвать метод, используя следующий фрагмент кода.
процедура TForm1.buttonClick (Отправитель: TObject); вар valReq: TValidationRequest; s1, s2, s3, s4, s5: WideString; о: WideString; начинать valReq: = TValidationRequest.Create (Самостоятельно); пытаться valReq.Process (s1, s2, s3, s4, o); MessageDlg (o, mtInformation, [mbOK], 0); наконец valReq: = ноль; конец; конец;
Но при вызове метода Process я получаю следующую ошибку.
Вы можете предложить какое-нибудь решение?
Ответов (2)2
В дополнение к тому, что сказал MarkusQ, обратите внимание, что ваше управление памятью TValidationRequest
объекта не так хорошо. Было бы чище использовать Create(nil)
и тогда в finally
-block писать FreeAndNil(valReq)
. Как сейчас, вы создаете один TValidationRequest
объект каждый раз, когда нажимаете кнопку, и все они будут оставаться в памяти, пока вы не уничтожите форму. По крайней мере, вы не получите утечки памяти, потому что вы передали Self
конструктору, поэтому, по крайней мере, форма позаботится об уничтожении этих объектов. В вашем примере действительно нет необходимости поддерживать объект в живых после завершения TForm1.buttonClick
метода.