I have problem to pass a referenced string to c#. Below are the code for c dll and c#
c dll code
extern "C" __declspec(dllexport) int test(string &msg)
{
msg = "test";
return 0;
}
c# code
[DllImport("c_dll.dll")]
public static extern int test(ref StringBuilder newMsg);
StringBuilder aaa = new StringBuilder();
aaa.append("");
int a = test(ref aaa);
i can compiled it successfully but whenever I tried to run it, I get this error
Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Please help to indicate which part of the code is wrong. Thank you
Loading
RidzuanPosted May 11, 2010, 10:22 AM
theLizardPosted May 10, 2010, 6:40 PM
{
msg = "test";
return 0;
}
you are attempting to get the string from c# by refereance [ &msg ] this is probably where you are having the problem since the error message tells you that This is often an indication that other memory is corrupt.
try sending the string using an (LPTSTR msg) int a = test(aaa); this should work as it does in C++ builder for me.
extern "C" __declspec(dllexport) int stdcall test(LPTSTR msg) //not sure if stdcall is valid for your situ
{
msg = "test";
return 0;
}
RidzuanPosted May 9, 2010, 5:08 AM
Jaish MathewsPosted May 8, 2010, 11:46 PM