to dullhe,
我比较菜,理解能力比较差,不知道我对你的知道理解的对不对:
delphi的动态库单元如下:
library dlltest;
uses
SysUtils,
Classes;
{$R *.res}
type
TMyClass = class
public
value: Integer;
constructor Create;
end;
var
myobj: TMyClass;
constructor TMyClass.Create;
begin
inherited Create;
end;
procedure CreateObj; stdcall;
begin
myobj := TMyClass.Create;
end;
procedure SetValue(V: Integer); stdcall;
begin
myobj.value := v;
end;
function GetValue: Integer; stdcall;
begin
Result := myobj.value;
end;
exports
CreateObj,
SetValue,
GetValue;
begin
end.
vc调用如下(具体全部代码不卸了,只写出关键代码):
typedef void (_stdcall *TCreateObj)();
typedef void (_stdcall *TSetValue)(int v);
typedef int (_stdcall *TGetValue)();
void CVctestDlg::OnButton1()
{
HINSTANCE hdll = LoadLibrary("dlltest.dll"
;
if(!hdll)
{
MessageBox("load dll error"
;
return;
}
TCreateObj CreateObj = (TCreateObj)GetProcAddress(hdll, "CreateObj"
;
if(!hdll)
{
MessageBox("load CreateObj error"
;
return;
}
TSetValue SetValue = (TSetValue )GetProcAddress(hdll, "SetValue"
;
if(!hdll)
{
MessageBox("load SetValue error"
;
return;
}
TGetValue GetValue = (TGetValue)GetProcAddress(hdll, "GetValue"
;
if(!hdll)
{
MessageBox("load GetValue error"
;
return;
}
CreateObj();
SetValue(10033);
int r = GetValue();
char buf[10];
sprintf(buf, "%d", r);
MessageBox(buf);
}
我用的是delphi7+vc6,测试结果,啥问题没有!
另外你说的分几个单元写,我觉得没必要,分了也木有啥问题,还是正确。
如果你觉得我写的不符合要求,你可以把你的错误代码贴在这里,或者直接发到我邮箱
我帮你琢磨琢磨,应该没有什么问题的,关键是解决问题。
如果你的ActiveX有问题,也可以一起探讨一下。