已经生成了OCX,但是页面里面调用,提示对象不支持。。
CLSID什么的都是对的,界面上能显示一个黑色表格。。但就是没法调用其中的方法wmcardPro.dpr:
主要是最后那三个方法
library wmcardPro;uses
ComServ,
wmcardPro_TLB in 'wmcardPro_TLB.pas',
wmcardImp in 'wmcardImp.pas' {ActiveFormX: TActiveForm} {ActiveFormX: CoClass};{$E ocx}exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer,
ReadUserCard,
WriteManageCard,
CheckCard;{$R *.TLB}{$R *.RES}begin
end.
wmcardImp.pas中的一段
function ReadUserCard: string;
var
dest: PChar;
n1:Integer;
begin
n1:=LoadLibrary('WHMQ.DLL');
fnReadUserCard:=getprocaddress(n1,'ReadUserCard');
dest:=fnReadUserCard();
Result :=IntToStr(BinToInt(Copy(dest,1,3)))+'|'+IntToStr(BinToInt(Copy(dest,4,1)))+'|'+
IntToStr(BinToInt(Copy(dest,5,4)))+'|'+IntToStr(BinToInt(Copy(dest,9,3)))+'|'+
IntToStr(BinToInt(Copy(dest,12,3)))+'|'+IntToStr(BinToInt(Copy(dest,15,3)));
FreeLibrary(n1);
end;function CheckCard :Integer;
var
n1:Integer;
begin
n1:=LoadLibrary('WHMQ.DLL');
fnCheckCard:=getprocaddress(n1,'CheckCard');
Result :=fnCheckCard;
FreeLibrary(n1);
end;function WriteManageCard(s:string):char;
var
n1,t:Integer;
s1,s2:string;
begin
n1:=LoadLibrary('WHMQ.DLL');
fnWriteManageCard:=getprocaddress(n1,'WriteManageCard');
s1:='';
s2:=s;
t:=0;
while(Pos('|',s2)<>0) do
begin
if t=2 then
s1:=s1+IntToBin(StrToInt(LeftStr(s2,Pos('|',s2))),1)
else if t=3 then
s1:=s1+IntToBin(StrToInt(LeftStr(s2,Pos('|',s2))),5)
else
s1:=s1+IntToBin(StrToInt(LeftStr(s2,Pos('|',s2))),3);
s2:=RightStr(s2,Pos('|',s2));
t:=t+1;
end;
Result :=fnWriteManageCard(s1);
FreeLibrary(n1);
end;程序是调用其他的DLL的,DLL是正常,我VB能够调用到。
大家帮忙看下是不是隐私级别哪里有问题。谢谢了!
CLSID什么的都是对的,界面上能显示一个黑色表格。。但就是没法调用其中的方法wmcardPro.dpr:
主要是最后那三个方法
library wmcardPro;uses
ComServ,
wmcardPro_TLB in 'wmcardPro_TLB.pas',
wmcardImp in 'wmcardImp.pas' {ActiveFormX: TActiveForm} {ActiveFormX: CoClass};{$E ocx}exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer,
ReadUserCard,
WriteManageCard,
CheckCard;{$R *.TLB}{$R *.RES}begin
end.
wmcardImp.pas中的一段
function ReadUserCard: string;
var
dest: PChar;
n1:Integer;
begin
n1:=LoadLibrary('WHMQ.DLL');
fnReadUserCard:=getprocaddress(n1,'ReadUserCard');
dest:=fnReadUserCard();
Result :=IntToStr(BinToInt(Copy(dest,1,3)))+'|'+IntToStr(BinToInt(Copy(dest,4,1)))+'|'+
IntToStr(BinToInt(Copy(dest,5,4)))+'|'+IntToStr(BinToInt(Copy(dest,9,3)))+'|'+
IntToStr(BinToInt(Copy(dest,12,3)))+'|'+IntToStr(BinToInt(Copy(dest,15,3)));
FreeLibrary(n1);
end;function CheckCard :Integer;
var
n1:Integer;
begin
n1:=LoadLibrary('WHMQ.DLL');
fnCheckCard:=getprocaddress(n1,'CheckCard');
Result :=fnCheckCard;
FreeLibrary(n1);
end;function WriteManageCard(s:string):char;
var
n1,t:Integer;
s1,s2:string;
begin
n1:=LoadLibrary('WHMQ.DLL');
fnWriteManageCard:=getprocaddress(n1,'WriteManageCard');
s1:='';
s2:=s;
t:=0;
while(Pos('|',s2)<>0) do
begin
if t=2 then
s1:=s1+IntToBin(StrToInt(LeftStr(s2,Pos('|',s2))),1)
else if t=3 then
s1:=s1+IntToBin(StrToInt(LeftStr(s2,Pos('|',s2))),5)
else
s1:=s1+IntToBin(StrToInt(LeftStr(s2,Pos('|',s2))),3);
s2:=RightStr(s2,Pos('|',s2));
t:=t+1;
end;
Result :=fnWriteManageCard(s1);
FreeLibrary(n1);
end;程序是调用其他的DLL的,DLL是正常,我VB能够调用到。
大家帮忙看下是不是隐私级别哪里有问题。谢谢了!
protected
function WriteManageCard(s:PChar):char; stdcall;类似的代码