[fpc-pascal] Poss FPC Bug
Justin Smyth
delphian at smythconsulting.net
Wed Apr 7 01:30:19 CEST 2010
Guys I need some help here , can some shed some light on this issue ?
I've got my own test dll with this function declared as an export
function GetCLSID(clsid:TGUID):Integer;stdcall;
begin
clsid := TESTGUID;
Result := S_OK;
end;
My testguid = '{3F5A62E1-1112-1100-A075-CC7364CAE42A}'
and in my test application i have DLL call to this function
function GetGuid(var MyGuidTest: TGUID): Integer;
var
Res:Integer;
begin
Load;
Res := PGetGuid(MyGuidTest);
if Res = S_OK then
begin
Result := res;
end;
Unload;
end;
and PGetGuid is defined as
PGetGuid : TFunctionGetGUID; which TFunctionGetGUID = function
(MyGuid:TGUID):Integer;StdCall;
I call this function above
MyGUid := GUID_NULL;
GetGuid(MyGuid);
LabelResult1.Caption := GUIDToString(MyGuid);
The Result of GetGuid is ALLWAYS GUID_NULL unless i change the DLL call to
be like this
function GetCLSID(out clsid:TGUID):Integer;stdcall;
begin
clsid := TESTGUID;
Result := S_OK;
end;
This relates to Ipersist.GetClassID which needs to be defined like this
Function GetClassId(Out clsid:TClsId):HResult; StdCall;
but its defined as
Function GetClassId(clsid:TClsId):HResult; StdCall;
which is a show stopper in my app it work work because the DeskBand.DLL cant
see which CSLID it is because the value never gets returned....
Delphian
----- Original Message -----
From: "Flávio Etrusco" <flavio.etrusco at gmail.com>
To: "Justin Smyth" <delphian at smythconsulting.net>; "FPC-Pascal users
discussions" <fpc-pascal at lists.freepascal.org>
Sent: Tuesday, April 06, 2010 9:56 AM
Subject: Re: [fpc-pascal] Poss FPC Bug.
On Mon, Apr 5, 2010 at 8:29 PM, Justin Smyth
<delphian at smythconsulting.net> wrote:
> guys i've been working on a port of an application that uses the Com
> IPersist Interface , one of its procedures seems to be wrong ,
>
>
> Function GetClassId(clsid:TClsId):HResult; StdCall;
>
> yet i believe it should be
>
> Function GetClassId(out clsid:TClsId):HResult; StdCall
>
> i've checked the MSDN and it says it should be returning a value -
>
> its defined in C++ as
>
> HRESULT GetClassID([out] CLSID *pClassID);
>
> pClassID [out]
>
> A pointer to the location that receives the CLSID on return. The CLSID is
> a
> globally unique identifier (GUID) that uniquely represents an object class
> that defines the code that can manipulate the object's data.
>
> Delphian
>
> Ps if i change this in the code , its the FPC that needs to be re complied
> ?
>
I've fallen victim of the same 'trap' on a similar function. Arrays
are passed "by reference" automatically in 'stdcall' calling
convention.
Flávio
More information about the fpc-pascal
mailing list