В пн, 2006-01-16 в 23:07 -0500, Alain Michaud написа: > This makes me think that it has to do with the parameters. This one has > three. Unfortunately there is no other 'simple' function in the > library: > > int pl_setplparam (plPlotterParams * plotter_params, const char > *parameter, void *value) > > which I translate into: > > function pl_setplparam (plotter_params:plplotterparams; const > parameter:PCHAR; value:PCHAR):cint; cdecl; external 'plot';
The proper function declarations should be: type PPlPlotterParams = Pointer; function pl_newplparams: PPlPlotterParams; cdecl; external 'plot'; function pl_setplparam(plotter_params: PPlPlotterParams; parameter: PChar; value: PChar): longint; cdecl; external 'plot'; note that PPlPlotterParams is declared as pointer. It's easiest way when you don't care what is the structure it is pointing to. Also notice that the second parameter is desclared without const this is due to pascal tranforming const parameters into pointers which is equivalent as declaring second parameter as "parameter: PPChar". > > please look at the last two parameters: one is "const" while the other > is not. Does that looks OK to you? Should I always use the same variable > names as the .h file? What should I do with the f... "void"? parameters names (even procedure names when using name) does not matter. it only matters the parameters' types and calling convention. > > 2 - Someone tells me that old compilers would accept " * int" while the > new compilers would prefer a variable name: "variable * int" or "void * > int". Unless this the other way around then I should not use the > NO_VOID_SUPORT. So I guess I do not worry about that one any more. you don't have to worry because in both ways the resulting lib is compatible with your declaration. > > 3 - The file I have is "libplot.so" I think that this is a shared > library. Does that coresponds to "cdecl; external 'plot';"? If not, then > this is where my mistake was!!!!!!! yes it is a shared library it corresponds to "cdecl; external 'plot';" > > Is: external 'plot'; equivalent to: {$L liplot.so} or: {$Linklib > liplot.so} ? external 'plot' - tells the linker in which lib to search for the function while using {$L} or {$linklib} adds the library and when you declare a function as external without specifying where it is located the linker searches for the name in all libraries Also please see the program h2pas in the utils section of free pascal. It makes translation from headers to pascal very easy, TIA, Geno Roupsky _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal