lui*_*bal 1 .net c# pinvoke pointers llvm
我试图使用P/Invokes将llvmc用作C#库(因为我找不到任何.NET绑定).
但是,我有一个问题.llvmc使用char**进行错误传递.
一个例子是这样的:
char* error = NULL;
LLVMVerifyModule(PointerToSomeModule, LLVMAbortProcessAction, &error);
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能在C#代码中使用此函数?
LLVMDisposeMessage(error);
Run Code Online (Sandbox Code Playgroud)
我刚看到答案,认为这可能是一个重要的细节.
char**参数很麻烦,存在内存管理问题.如果将参数声明为"out string",则P/Invoke marshaller将尝试释放指针.这不太可行,它需要使用CoTaskMemAlloc()分配字符串.
唯一的另一个选择是你必须将它声明为"out IntPtr"并用Marshal.PtrToStringAnsi()自己编组字符串.如果LLVMC实际上希望你释放指针,那将超出不可插拔的内存泄漏.称它为一百万次来验证.由于它是一个错误消息,它有一些可能不会被打击,它可能会返回一个指向字符串文字的指针.
剩下的唯一选择是用C++/CLI语言编写一个包装器,这样你就可以释放指针.