C# VS2013 프로그램의 Pinvoke를 사용하여 기존 DelphiXE2 DLL 프로그램에 액세스하려고합니다. Delphi 프로그램은 XML 파일과 IB 데이터베이스 파일을 가져 와서 XML 파일에 따라 데이터베이스를 업데이트합니다. DelphiXE2 dll 프로그램이 다른 Delphi 프로그램에서 성공적으로 호출되고 있습니다. C#에서는 GETxml 프로그램을 호출하려고합니다. { "외부 구성 요소에서 예외가 발생했습니다."} 오류가 발생했습니다.VS2013 C# 프로그램에서 DELPHI XE2 DLL을 호출하는 중 오류가 발생했습니다.
C# 및 DELPHI에 익숙하지 않으므로 구문 검사가 필요합니다.
C#을
[DllImport("MSA.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, EntryPoint = "GetXML")]
extern static int GetXML([MarshalAs(UnmanagedType.LPStr)] string a, [MarshalAs(UnmanagedType.LPStr)] string b, Boolean c);
int retval = 0;
retval = GetXML(txtPath.Text.ToString().Trim(), txtCabFile.Text.ToString().Trim(), false);
델파이 프로그램을 기존 : (나는 열려있는 데이터베이스가이 DLL 함수에서 발생되지 않은 것으로 나타났습니다 사실은은 GetXML 호출하기 전에 호출 델파이 프로그램에서 발생하는 경우 확실하지.. 이 문제 여부 나는 C# 프로그램에서 호출 오전부터입니다)
function GetXML(DatabasePath: pChar; OFileName: pChar; Silent: Boolean = True): Integer; stdcall;
var
xmlDatabase: TIBDatabase;
xmlTransaction: TIBTransaction;
objXML: TXML;
begin
Result := -1;
if FileExists(oFilename) then
begin
objXML := nil;
xmlDatabase := nil;
try
xmlDatabase := TIBDatabase.Create(nil);
xmlTransaction := TIBTransaction.Create(xmlDatabase);
xmlTransaction.DefaultDatabase := xmlDatabase;
xmlDatabase.DatabaseName := DatabasePath;
xmlDatabase.Params.Add('user_name=SYSTASS');
xmlDatabase.Params.Add('password=pswdf88');
xmlDatabase.LoginPrompt := False;
xmlDatabase.DefaultTransaction := xmlTransaction;
xmlDatabase.Connected := True;
xmlTransaction.StartTransaction;
try
objXML := TXML.Create(XMLDatabase, IsSecGDB(XMLDatabase)); //uses IBQUERY to start transaction
objXML.XMLIntoDB(oFilename, Silent);
xmlTransaction.Commit;
result := 1;
except
on e: Exception do
begin
xmlTransaction.Rollback;
raise Exception.Create('GetXML Exception: ' + e.Message);
end;
end;
finally
FreeAndNil(objXML);
if xmlDatabase <> nil then
xmlDatabase.Close;
FreeAndNil(xmlDatabase);
end;
끝에 다른 가 ('파일 이름'+ oFilename + '매개 변수를 찾을 수 없습니다.') 가 Exception.Create 인상 시작한다.; 끝; 끝;
왜'int retval = 0; retval = GetXML (...); '? 확실히 당신은'int retval = GetXML (...); '을 의미합니다. –
그래, 변경했다. 감사. –