建議:
<1>在做測試工程時建議,先建立一個簡單的測試模型,即一個Delphi DLL工程和一個C#工程,不要引入多階模式,待兩階測試成功後再轉換成多階模式
<2>出現不明確的異常問題時,不要立即懷疑技術上不支持,依照DLL技術規范和Delphi技術C#技術等基礎技術知識來分析問題,注意技術細節和技術的組合方式,由簡到難,由淺到深的方式來解決疑難問題
<3>先動腦,後動手;多動手
Delphi工程代碼:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
XmlDoc: TXMLDocument;
Button1: TButton;
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;
function GetTable():PChar; //聲明一個不帶參數的方法,返回字符串類型
function GetString(var Param:PChar):PChar;stdcall; //聲明一個帶參的方法,返回字符串類型
function GetXML(var Param:PChar):PChar;stdcall; //聲明一個帶參的方法,返回字符串類型
var
Form1: TForm1;
implementation
uses XML;
{$R *.dfm}
function GetTable():PChar;
begin
result := '測試方法';
end;
function GetString(var Param:PChar):PChar;stdcall;
begin
result := PChar(Format('123%s',[Param]));
end;
function GetXML(var Param:PChar):PChar;stdcall;
var
XML:string;
FieldName,FieldValue:string;
XMLDoc:TXMLDoc;
m:Integer;
begin
try
Form1 := TForm1.Create(Application);
Form1.ADOQuery1.Open();
XMLDoc := TXMLDoc.Create();
XMLDoc.BillXmlDoc := Form1.XmlDoc;
XMLDoc.InitXML();
while(not Form1.ADOQuery1.Eof) do
begin
XMLDoc.AddRow();
for m:=0 to Form1.ADOQuery1.Fields.Count-1 do