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
kajot
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
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
any samples
#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 ENDDUMPthans
I get error
Missing prototype for 'strupr'
char * strupr( char * );
...
next error
unresolved external symbol '_strupr'
What C compiler are you using ?
Here it works fine using Borland C 5.5
I am usingv
xHarbour Compiler build 1.0.0 (SimpLex)
Copyright 1999-2007, http://www.xharbour.org http://www.harbour-project.org/
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 ?
yes, I am using commercial
#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 ENDDUMPthanks
I got worning
missing prototype for '_toupper'
#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 ENDDUMPI 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'"