16,748
社区成员
发帖
与我相关
我的任务
分享
type
TCOM1 = class(TTypedComObject, ICOM1)
protected
function Show(v1, v2: Integer): Integer; stdcall;
end;
implementation
uses ComServ;
function TCOM1.Show(v1, v2: Integer): Integer;
begin
// 将传递进来的参数输出到调试器
OutputDebugString(PChar(Format('TCom1(%d, %d)', [v1, v2])));
Result := 1;
end;
function GetCom1: ICOM1 stdcall;
begin
Result := CoCOM1.Create;
end;
ICOM1 = interface(IUnknown)
function Show(v1: Integer; v2: Integer): Integer; stdcall;
end;
var
O: ICOM1;
begin
O := GetCom1; // 从DLL导出函数中获得COM实例
O.Show(11, 22); // 调用COM接口方法,成功输出数字
end;
QLibrary lib("com");
if (lib.load()) {
typedef IUnknown*(__stdcall *GETCOM1)();
GETCOM1 getCom1 = (GETCOM1)lib.resolve("GetCom1");
IUnknown *com1 = getCom1(); // 这一步就发生异常了,异常发生在GetCom1导出函数中的 Result := CoCOM1.Create;
QAxObject obj(com1);
obj.dynamicCall("Show(int v1, int v2)", 55, 66);
}
function GetCom1: ICOM1 stdcall;
begin
OutputDebugString('111111'); // 代码只走到这里
Result := CoCOM1.Create; // 对Result进行赋值,崩溃了
OutputDebugString('222222');
end;