を発生させ、私は、Win32 DLLが渡すバイト配列がAccessViolationException
__declspec(dllexport) int GetData(unsigned char* *data, int* size)
{
try
{
int tlen = 3;
unsigned char* tchr = new unsigned char[5];
tchr[0] = 'a';
tchr[1] = 'b';
tchr[2] = 'c';
*size = tlen;
*data = tchr;
return 1;
}
catch (char *p)
{
return 0;
}
}
とC#側の
[DllImport("MyDll.dll")]
static extern int GetData(ref byte[] data, ref int size);
static void Main()
{
try
{
int hr = 0;
byte[] gData = null;
int gSize = 0;
hr = GetData(ref gData, ref gSize);
Console.WriteLine(gSize);
for (int i = 0; i < gSize; i++)
Console.WriteLine((char)gData[i]);
}
catch (Exception p)
{
Console.WriteLine(p.ToString());
}
}
を次のようにC#で呼ばれているいくつかの機能を公開して作成しようとしています私はC#コードを実行します。AccessViolationException
は、GetData
関数で発生します。これはC++コードでは例外の兆候ですが、C++コードスニペットはエラーなしで正常に動作します。
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char* data = NULL;
int size = NULL;
GetData(&data, &size);
printf("%d", size);
for (int i = 0; i < size; i++)
printf("%c,", data[i]);
return 0;
}
あなたがC#main
機能およびC++ _tmain
を比較すると、彼らはほとんどanaloguousているので、私はミスを犯すことがありどこ?
希望すると、これが役立ちます。 http://stackoverflow.com/questions/8199874/c-sharp-and-void-pointers –