自己编写的ActiveX控件出了点问题,请指教~!:其他公司提供的DLL,里面有一读卡函数
原型:
int ReadCard(int ReadType=9, int RecordId=1, char* DataBuffer);我在Delphi里定义为
const
DllName='DBLib2.dll';
Function ReadCard(ReadType:Integer; RecordId:Integer; DataBuffer:PChar):Integer;{stdcall;}stdcall;external DllName;然后建立一类进行封装
TLnHisObj = class(TObject)
private
fDataBuffer: PChar;
public
constructor Create;
Function VbReadCard():Integer;
end;constructor TLnHisObj.Create;
begin
inherited;
GetMem(fDataBuffer,1024);
end;function TLnHisObj.VbReadCard: Integer;
begin
result := ReadCard(9, 1, fDataBuffer);
end;然后创建一ActiveForm控件进行包装
TLnHis = class(TActiveForm, ILnHis)
procedure ActiveFormCreate(Sender: TObject);
private
FEvents: ILnHisEvents;
fLnHisObj : TLnHisObj;
procedure BeforeFree;
protected
function VbReadCard: Integer; safecall;
end;procedure TLnHis.ActiveFormCreate(Sender: TObject);
begin
fLnHisObj := TLnHisObj.Create;
end;procedure TLnHis.BeforeFree;
begin
fLnHisObj.free;
end;function TLnHis.VbReadCard: Integer;
begin
Result := fLnHisObj.VbReadCard;
end编译OCX,注册,在HTM里测试时,执行VbReadCard就报错,内存错误,看不懂哪里出错了?
把fDataBuffer改为一维固定1024长度Char数组也不行。可是我做了另一个EXE,测试TLnHisObj类的实例对象的读卡VbReadCard函数是成功的,郁闷了!!请大家指点~!!
原型:
int ReadCard(int ReadType=9, int RecordId=1, char* DataBuffer);我在Delphi里定义为
const
DllName='DBLib2.dll';
Function ReadCard(ReadType:Integer; RecordId:Integer; DataBuffer:PChar):Integer;{stdcall;}stdcall;external DllName;然后建立一类进行封装
TLnHisObj = class(TObject)
private
fDataBuffer: PChar;
public
constructor Create;
Function VbReadCard():Integer;
end;constructor TLnHisObj.Create;
begin
inherited;
GetMem(fDataBuffer,1024);
end;function TLnHisObj.VbReadCard: Integer;
begin
result := ReadCard(9, 1, fDataBuffer);
end;然后创建一ActiveForm控件进行包装
TLnHis = class(TActiveForm, ILnHis)
procedure ActiveFormCreate(Sender: TObject);
private
FEvents: ILnHisEvents;
fLnHisObj : TLnHisObj;
procedure BeforeFree;
protected
function VbReadCard: Integer; safecall;
end;procedure TLnHis.ActiveFormCreate(Sender: TObject);
begin
fLnHisObj := TLnHisObj.Create;
end;procedure TLnHis.BeforeFree;
begin
fLnHisObj.free;
end;function TLnHis.VbReadCard: Integer;
begin
Result := fLnHisObj.VbReadCard;
end编译OCX,注册,在HTM里测试时,执行VbReadCard就报错,内存错误,看不懂哪里出错了?
把fDataBuffer改为一维固定1024长度Char数组也不行。可是我做了另一个EXE,测试TLnHisObj类的实例对象的读卡VbReadCard函数是成功的,郁闷了!!请大家指点~!!
delphi中,Run|Attach to Process...
打开一个窗口,找到IEXOPLORER.exe程序,如果没有,选择下面的"Show System Processes"
然后再Attach,这个时候会跳出一个错误窗口,不用管它,关闭,继续运行。
在IE里面执行到你设置断点的地方,就可以进行调试了。
注意文件的输出路径要和注册的地方是一个地方。有不明白的地方可以给我发消息,祝你好运了。