KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am interfacing with code that takes a char** (that is, a pointer to a string): int DoSomething(Whatever* handle, char** error); Basically, it takes a handle to its state, and if something goes wrong, it returns an error code and optionally an error message (the memory is allocated externally and freed with a second function. That part I've figued out :) ). I, however, am unsure how to handle in in C#. What I have currently: [DllImport("mydll.dll", CallingConvention = CallingConvention.Cdecl)] private static unsafe extern int DoSomething(IntPtr handle, byte** error); public static unsafe int DoSomething(IntPtr handle, out string error) { byte* buff; int ret = DoSomething(handle, &buff); if(buff != 0) { // ??? } else { error = ""; } return ret; } I've poked around, but I can't figure out how to turn that into a byte[] , suitable for feeding to UTF8Encoding.UTF8.GetString() Am I on the right track? EDIT: To make more explicit, the library function allocates memory , which must be freed by calling another library function . If a solution does not leave me with a pointer I can free, the solution is unacceptable. Bonus question: As implied above, this library uses UTF-8 for its strings. Do I need to do anything special in my P/Invokes, or just use string for normal const char* parameters?
Tags (comma-separated)
Save Edits
Cancel