hallo,
ich habe versucht, einen In-Process COM-Server mit Type-Library
zu erstellen. Für meine Methode habe ich HRESULT als Return Type
definiert.
Wenn ich nun mit "Import Type Library" eine Komponente erstelle,
diese auf einem Form einfüge und meine Methode aufrufe,
wird meine Methode abgearbeitet, das Result, das ich danach erhalte,
entspricht aber nicht dem von mir übergebenen.
Ich erhalte 4362580 als Rückgabewert.
<pre>
//aus dem COM Server...
unit uComInProcTest;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, ActiveX, Classes, ComObj, ComInProcTest_TLB, StdVcl;
type
TTestCom = class(TTypedComObject, ITestCom)
protected
function TestMethod: HResult; stdcall;
end;
implementation
uses ComServ;
function TTestCom.TestMethod: HResult;
begin
Result := <FONT COLOR="red">12345</font>;
end;
initialization
TTypedComObjectFactory.Create(ComServer, TTestCom, Class_TestCom,
ciSingleInstance, tmApartment);
end.
//aus dem COM-Client...
procedure TForm1.Button1Click(Sender: TObject);
var
i: HResult;
begin
i := 0;
i := TestCom1.TestMethod;
ShowMessage(IntToStr(i)); //gibt <FONT COLOR="red">4362580</font> an Stelle von 12345 zurück
end;
</pre>
Wo liegt mein Fehler?
Ich habe versucht einen Long-Wert im Type-Library zu definieren,
was das selbe Ergebnis zur Folge hatte. Wenn ich einen Variant
verwende, bekomme ich 0 zurück.
Wenn ich IN-Variablen definiere bekomme ich die richtigen Werte übergeben.
Warum funktioniert es mit dem Result nicht?
mfg
Alexander Stracker
ich habe versucht, einen In-Process COM-Server mit Type-Library
zu erstellen. Für meine Methode habe ich HRESULT als Return Type
definiert.
Wenn ich nun mit "Import Type Library" eine Komponente erstelle,
diese auf einem Form einfüge und meine Methode aufrufe,
wird meine Methode abgearbeitet, das Result, das ich danach erhalte,
entspricht aber nicht dem von mir übergebenen.
Ich erhalte 4362580 als Rückgabewert.
<pre>
//aus dem COM Server...
unit uComInProcTest;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, ActiveX, Classes, ComObj, ComInProcTest_TLB, StdVcl;
type
TTestCom = class(TTypedComObject, ITestCom)
protected
function TestMethod: HResult; stdcall;
end;
implementation
uses ComServ;
function TTestCom.TestMethod: HResult;
begin
Result := <FONT COLOR="red">12345</font>;
end;
initialization
TTypedComObjectFactory.Create(ComServer, TTestCom, Class_TestCom,
ciSingleInstance, tmApartment);
end.
//aus dem COM-Client...
procedure TForm1.Button1Click(Sender: TObject);
var
i: HResult;
begin
i := 0;
i := TestCom1.TestMethod;
ShowMessage(IntToStr(i)); //gibt <FONT COLOR="red">4362580</font> an Stelle von 12345 zurück
end;
</pre>
Wo liegt mein Fehler?
Ich habe versucht einen Long-Wert im Type-Library zu definieren,
was das selbe Ergebnis zur Folge hatte. Wenn ich einen Variant
verwende, bekomme ich 0 zurück.
Wenn ich IN-Variablen definiere bekomme ich die richtigen Werte übergeben.
Warum funktioniert es mit dem Result nicht?
mfg
Alexander Stracker
Comment