calling c++ functions using ffi (berkeley dbxml under windows)

Petr petr at madnetwork.org
Sat Oct 28 21:47:13 UTC 2006


Hello again!
So I found out how to get the function names and I can successfully call
them. As it is for me sufficient to run my program under windows, I am
going to use the mangled names, without a C wrapper. However, I have
another problem. How do I get values from functions, which return 
multiple values using a pointer? For example:

	void DbXml::dbxml_version(int *majorp, int *minorp, int *patchp)

--Petr


Andreas Raab wrote:
> A very good article is here:
> 
>   http://en.wikipedia.org/wiki/Name_mangling
> 
> The FFI doesn't do name mangling so for calling C++ functions so you 
> either need to provide the mangled name or provide a wrapper function 
> (via extern "C").
> 
> Cheers,
>   - Andreas
> 
> Petr wrote:
>> Hello,
>> I am trying to use Berkeley DB XML from withing Squeak. I already 
>> found out how to call C functions, but I got stuck on "Error : can't 
>> find function address" when calling a function in a C++ shared 
>> library. So I first looked up some info on the Squeak wiki and found 
>> this: http://minnow.cc.gatech.edu/squeak/3735. I used nm from mingw on 
>> the libdbxml22.lib and got a lot of some information I do not exactly 
>> understand. An example:
>>
>> libdbxml22.dll:
>> 00000000 I .idata$4
>> 00000000 I .idata$5
>> 00000000 I .idata$6
>> 00000000 T .text
>> 00000000 T ?abort at XmlTransaction@DbXml@@QAEXXZ
>> 00000000 I _imp_?abort at XmlTransaction@DbXml@@QAEXXZ
>>          U _IMPORT_DESCRIPTOR_libdbxml22
>>
>> libdbxml22.dll:
>> 00000000 I .idata$4
>> 00000000 I .idata$5
>> 00000000 I .idata$6
>> 00000000 T .text
>> 00000000 T ?add at XmlResults@DbXml@@QAEXABVXmlValue at 2@@Z
>> 00000000 I _imp_?add at XmlResults@DbXml@@QAEXABVXmlValue at 2@@Z
>>          U _IMPORT_DESCRIPTOR_libdbxml22
>>
>> Any pointers to some resources how should I continue are appreciated.
>>
>> --Petr
>>
>>
>>
> 
> 
> 





More information about the Squeak-dev mailing list