<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Dennis via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>> schrieb am Fr., 4. Okt. 2024, 08:40:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear All,<br>
<br>
I am given an API linux library *.so file written in C++.<br>
It was expected to be consume by a program written in C++.<br>
However, I would like to write such a program in Free Pascal.</blockquote></div></div><div dir="auto"><br></div><div dir="auto">[snip] </div><div dir="auto"><br></div><div dir="auto"></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
I am expected to create and pass an instance of such class <br>
ApiProxyWrapperReply in my calling program<br>
  via a function<br>
void SPAPI_RegisterApiProxyWrapperReply(ApiProxyWrapperReply* <br>
apiProxyWrapperReply);<br>
<br>
and the external library will then call the various methods of <br>
ApiProxyWrapperReply  as 'call-back' functions when needed.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Considering that the class only has abstract virtual methods and the destructor is non-virtual you *might* be able to do this by declaring a raw interface ({$Interfaces Corba}) and declaring all the virtual methods in the same order (very important!) with suitable signatures and calling convention (for i386 you should pick cppdecl otherwise the system default should be alright), implementing that interface in some Object Pascal class and then passing an instance of that interface to the library.</div><div dir="auto"><br></div><div dir="auto">It could still go wrong due to some differences in the ABI, but it might just as well work. 🤷‍♀️</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I consulted co-pilot but it failed to teach me how to do so in a Free <br>
Pascal program calling such an external library.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Shows that the current state of "AI" can't help with every obscure topic 😅</div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>