give pointer in dll

give pointer in dll

Postby kajot » Mon Jul 07, 2008 6:06 pm

how may I give pointer as parameter to function in DLL

p1,p2 - pinter
err:=_OWersja(p1,p2)

...
...


???
declare DLL_TYPE_BYTE _OWersja(DLL_TYPE_LPCSTR CFILE1, DLL_TYPE_LPCSTR CFILE2) in WinIP.Dll
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Postby Antonio Linares » Mon Jul 07, 2008 6:15 pm

Kajot,

strings are automatically managed as pointers (their addresses is supplied, not their content).

For numbers you have to supply them by reference using @

If the function is not working as expected, its a good idea to access it using C code instead of using DLL FUNCTION, just to locate where the problem may come from. Just implement a C wrapper using pragma BEGINDUMP ... ENDDUMP. There are many examples in these forums
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby kajot » Mon Jul 07, 2008 6:31 pm

any samples
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Postby Antonio Linares » Wed Jul 09, 2008 11:17 pm

Here you have a working example that shows how strings are managed as pointers:
Code: Select all  Expand view  RUN
#include "FiveWin.ch"

function Main()

   local cIn := "Hello world!"
   local cOut := Space( Len( cIn ) )

   Test( cIn, cOut )

   MsgInfo( cOut )

return nil

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( TEST )
{
   strcpy( hb_parc( 2 ), hb_parc( 1 ) );
   strupr( hb_parc( 2 ) );
}   

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby kajot » Thu Jul 10, 2008 7:01 pm

thans
I get error

Missing prototype for 'strupr'
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Postby Antonio Linares » Thu Jul 10, 2008 7:19 pm

#include <hbapi.h>

char * strupr( char * );

...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby kajot » Thu Jul 10, 2008 8:33 pm

next error

unresolved external symbol '_strupr'
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Postby Antonio Linares » Thu Jul 10, 2008 10:45 pm

What C compiler are you using ?

Here it works fine using Borland C 5.5
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby kajot » Fri Jul 11, 2008 4:49 am

I am usingv
xHarbour Compiler build 1.0.0 (SimpLex)
Copyright 1999-2007, http://www.xharbour.org http://www.harbour-project.org/
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Postby Antonio Linares » Fri Jul 11, 2008 7:12 pm

Both Harbour and xHarbour generate a C output file that has to be compiled with a C compiler.

Are you using Borland or Microsoft C compiler to compile the output .C ?
Are you using xHarbour commercial ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby kajot » Sat Jul 26, 2008 5:57 am

yes, I am using commercial
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Postby Antonio Linares » Sat Jul 26, 2008 8:17 am

Kajot,

Then add this code to the PRG:
Code: Select all  Expand view  RUN
#pragma BEGINDUMP

#include "string.h"
#include "ctype.h"

char * strupr( char * string )
{
   char c, * p = string;

   while( ( c = * p )  != '\0' )
      * ( p++ ) = _toupper( c );

   return string;
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby kajot » Sun Jul 27, 2008 8:53 am

thanks

I got worning

missing prototype for '_toupper'
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Postby Antonio Linares » Sun Jul 27, 2008 8:58 am

Try this one:

char _toupper( char );

Code: Select all  Expand view  RUN
#pragma BEGINDUMP

#include "string.h"
#include "ctype.h"

char _toupper( char );

char * strupr( char * string )
{
   char c, * p = string;

   while( ( c = * p )  != '\0' )
      * ( p++ ) = _toupper( c );

   return string;
}

#pragma ENDDUMP
Last edited by Antonio Linares on Sun Jul 27, 2008 9:09 am, edited 1 time in total.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42111
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby kajot » Sun Jul 27, 2008 9:05 am

I change
toupper(c)

and is OK

but I got worning in

declare DLL_TYPE_BYTE _OWersja(DLL_TYPE_LPCSTR cfile1, DLL_TYPE_LPCSTR cfile2) in WinIP.Dll

syntax error: "parse error at 'CFILE1'"
best regards
kajot
User avatar
kajot
 
Posts: 339
Joined: Thu Nov 02, 2006 6:53 pm
Location: Poland

Next

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 68 guests