C Struct

User avatar
patdriscoll
Posts: 16
Joined: Tue May 19, 2009 7:28 pm

C Struct

Post by patdriscoll »

Hello,

I am developing with xHarbour(version dated 17/11/2-11 from xHarbout.com and Fivewin for Harbour. I realise this is an xHarbour issue rather than a Fivewin issue, but I am hoping someone on this forum can help me.

I am trying to get DLLCAL() working wit little to no success. My sample code and (what it returns) can be seen below. All numbers are zero and the string is blank.

Any suggestions or help would be appreciated.

Cheers,
Pat Driscoll


#include "CStruct.ch" // required for "typedef struct"
#include "Wintypes.ch" // required Windows C data types

pragma pack(4) // all Windows API structures
// are 4 byte aligned

// structure declaration taken via
// copy&paste from Windows SDK
typedef struct _OSVERSIONINFOEX { ;
DWORD dwOSVersionInfoSize; // ˆ this ";" must be added
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[128];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wSuiteMask;
BYTE wProductType;
BYTE wReserved;
} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;

#define DC_CALL_STD 0x0020

PROCEDURE Main()
LOCAL oVerInfo


// Create OSVERSIONINFOEX structure object
oVerInfo := (struct OSVERSIONINFOEX)

// assign structure size to structure member
oVerInfo:dwOSVersionInfoSize := oVerInfo:sizeOf()

// pass structure object by reference to DllCall()
// (it is an OUT parameter)
DllCall( "Kernel32.dll", DC_CALL_STD , "GetVersionEx", @oVerInfo )

// display result of API
MsgInfo(str(oVerInfo:dwMajorVersion)) // result: 0
MsgInfo(str(oVerInfo:dwMinorVersion)) // result: 0
MsgInfo(str(oVerInfo:dwBuildNumber)) // result: 0

// this member contains a byte array
// retrieve it as character string
MsgInfo(oVerInfo:szCSDVersion:asString()) // result: blank spaces
RETURN
Pat Driscoll
Australia
User avatar
Antonio Linares
Site Admin
Posts: 42595
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 38 times
Been thanked: 86 times
Contact:

Re: C Struct

Post by Antonio Linares »

Pat,

Please try to build it NOT linking the FWH libraries.

It may be a function conflict name due to the versions that you are using.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
patdriscoll
Posts: 16
Joined: Tue May 19, 2009 7:28 pm

Re: C Struct

Post by patdriscoll »

Hi Antonio,

Thanks for your reply.

I compiled a DOS version of just the PRG (renaming the FWH folder to fool xBuildW that there was no Fivewin installed). I replace? the MsgInfo() with ? and I get the same result.

I have managed to call other DLLs successfully in the past, but not using cStructures (this was using the exact same versions of xHB and FWH). The bigger picture is that I am interfacing to a Digital Persona bioscan SDK and was having troubles, so went back to a documented example using c Structures as parameters.

Interestingly I made some calls to the GetTimeZoneInformation function of kernel32.dll and was able to get meaningful returns only for StandardName and DaylightName. Other things like StandardDate:wHour, for example return 0 as well.

I am confused.

Cheers,

Pat.
Pat Driscoll
Australia
User avatar
Antonio Linares
Site Admin
Posts: 42595
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 38 times
Been thanked: 86 times
Contact:

Re: C Struct

Post by Antonio Linares »

Pat,

Based on your results, to me it seems as a xharbour bug. I suggest you to contact xhb.com and report it to them. We can't help you on that, sorry.

Why don't you create an import library from the DLL that you need to manage and then use direct link using some C wrappers ? Its very easy and you have the FWH sources at winapi folder plenty of examples :-) If you need help just say it.

Also I take the oportunity to insist that you (all of you) migrate to Harbour (many readers will say here: "oh, Antonio again on the same") but Harbour is rock solid , with a growing ang growing users base, and you will be happier and we will have less tech support :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
patdriscoll
Posts: 16
Joined: Tue May 19, 2009 7:28 pm

Re: C Struct

Post by patdriscoll »

Hi Antonio,

Thanks again for your reply and advice.

So you are advising that I move from xHarbour to Harbour, yes? I am open to this advice, but I am not a C programmer. For me using xHB.com was a cheater's way of remaining C illiterate when I moved from Clipper, thus allowing me to focus on delivering client applications. Lazy, I know.

My biggest concern is the many applications I have that are using Fivewin/xHB. By moving to Fivewin/Harbour, what will I lose? I know there is more to gain you say :).

Anyway I am going to give it a go. Can you point me to a "getting started document" to download harbour and comile one of my existing programs, please?

Thanks again, Antonio.

Cheers,

Pat.
Pat Driscoll
Australia
User avatar
cnavarro
Posts: 6558
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: C Struct

Post by cnavarro »

In the forum you will find many examples of the use of harbour: mak, bat, etc., also included in the distribution FWH faith.
Also: http://harbour.github.io/faq/index.html
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
Antonio Linares
Site Admin
Posts: 42595
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 38 times
Been thanked: 86 times
Contact:

Re: C Struct

Post by Antonio Linares »

Pat,

You can download the most recent Harbour for Borland that we have published from here:

https://code.google.com/p/harbour-and-xharbour-builds/downloads/detail?name=harbour_bcc582_20131007.zip

Please send me an email and I will explain you where to download Borland bcc582

To build your app, you just need this two go.bat and test.mak file:

viewtopic.php?p=160199#p160199

You will not notice at all that you are using a C compiler to generate the harbour OBJs :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Enrico Maria Giordano
Posts: 8761
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Has thanked: 1 time
Been thanked: 5 times
Contact:

Re: C Struct

Post by Enrico Maria Giordano »

Antonio,

Antonio Linares wrote:Also I take the oportunity to insist that you (all of you) migrate to Harbour (many readers will say here: "oh, Antonio again on the same") but Harbour is rock solid , with a growing ang growing users base, and you will be happier and we will have less tech support :-)


Any news regarding OleDefaultArg() function in Harbour?

EMG
User avatar
Antonio Linares
Site Admin
Posts: 42595
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 38 times
Been thanked: 86 times
Contact:

Re: C Struct

Post by Antonio Linares »

Enrico,

Finally (thanks to Przemek)

#include "hbole.ch"
#define WIN_DISP_E_PARAMNOTFOUND ( 0x80020004L )

function OleDefaultArg()
return __oleVariantNew( WIN_VT_ERROR, WIN_DISP_E_PARAMNOTFOUND )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Enrico Maria Giordano
Posts: 8761
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Has thanked: 1 time
Been thanked: 5 times
Contact:

Re: C Struct

Post by Enrico Maria Giordano »

Antonio,

thank you! I'll try Harbour again. :-)

EMG
User avatar
nageswaragunupudi
Posts: 10729
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 10 times
Contact:

Re: C Struct

Post by nageswaragunupudi »

I am not able to locate hbole.ch in habour\include folder.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Antonio Linares
Site Admin
Posts: 42595
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 38 times
Been thanked: 86 times
Contact:

Re: C Struct

Post by Antonio Linares »

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 6558
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: C Struct

Post by cnavarro »

Enrico Maria Giordano wrote:Antonio,

Antonio Linares wrote:Also I take the oportunity to insist that you (all of you) migrate to Harbour (many readers will say here: "oh, Antonio again on the same") but Harbour is rock solid , with a growing ang growing users base, and you will be happier and we will have less tech support :-)


Any news regarding OleDefaultArg() function in Harbour?

EMG


Enrico
You can give an example of using this function OleDefaultArg ()?
Puedes poner un ejemplo de uso de esta funcion OleDefaultArg()?

I found this link
viewtopic.php?f=3&t=27404&hilit=OleDefaultArg&start=30#p152620

No entiendo en qué tipo de parámetros se puede usar
I do not understand what kind of parameters can be used
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
Enrico Maria Giordano
Posts: 8761
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Has thanked: 1 time
Been thanked: 5 times
Contact:

Re: C Struct

Post by Enrico Maria Giordano »

Cristobal,

cnavarro wrote:You can give an example of using this function OleDefaultArg ()?
Puedes poner un ejemplo de uso de esta funcion OleDefaultArg()?

I found this link
viewtopic.php?f=3&t=27404&hilit=OleDefaultArg&start=30#p152620

No entiendo en qué tipo de parámetros se puede usar
I do not understand what kind of parameters can be used


It is in the link you reported.

EMG
Post Reply