如何解决delphi和android动态库
我已经编译了一个小型的动态Android Arm库(用c ++编写),目的是测试Delphi如何与之交互(作为另一个真正的大项目的起点): 这是我的C ++:
const char* TestHelloWorld()
{
std::string a = "world";
std::string b = (boost::format("hello: %s") % a).str();
char* c = const_cast<char*>(b.c_str());
LOGI("%s",c);// using android log ( adb )
return c;
}
这是我的Delphi实现:
procedure TForm7.Button1Click(Sender: TObject);
var
DocDir,LibFN: string;
_TestHelloWorld: function() : MarshaledAString; cdecl;
hLib: HMODULE;
begin
DocDir := IncludeTrailingPathDelimiter(TPath.GetLibraryPath);
LibFN:=DocDir + 'libtest-cpp.so';
hLib := LoadLibrary(PWideChar(LibFN));
if hLib<>0 then
begin
_TestHelloWorld: GetProcAddress(hLib,'TestHelloWorld');
ShowMessage(_TestHelloWorld: );
end;
end;
Android日志中的结果:
delphi的结果:
所以请问我的delphi代码有什么问题;与使用MarshaledAString
有关?
PS:我正在使用RAD Studio Tokyo版本。
解决方法
我认为您的C ++ char *是PWideChar(在现代C ++ Builder中),因此应与Delphi端的MarshaledString匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。