0
Hi Josh,
I think you would find the following article by Paul DiLascia useful:
http://msdn.microsoft.com/msdnmag/issues/03/02/CQA/default.aspx
Hope this help,
MCB.
0
OK, I'll try to explain.
I have an unmanaged C++ library that works with a piece of hardware.
I wrote a managed C++ wrapper for the library.
My main app is in C#.
The hardware (library) raises an event in the unmanaged C++ . I want to call a routine in the GUI (C#). To do that I send a delegate from the C# program to the c++ program.
The managed C++ wrapper gives me the ability to declare a reference in the C# program. I do not want to declare routines in external dll's.
The delegate is called. That part works. The problem is that I can't get the C++ to pass the whole array over to the C#. Only the first element in the array seems to arrive.
I once had this defined as unsafe code, and passed a *byte instead of []byte - and it worked. I was just trying to make this code safe.
Hope this explains my intentions.
Thanks for all your patience.
Josh
0
For the record are talking C# or C++ here ^_^
0
Thanks, but I already got it to work with unsafe code.
This is how it looked:
typedef void __stdcall FoundPidFunction (
unsigned char *pData,
}
However, I want it to work with safe code.
Am I asking too much from MS?
Josh
0
maybe it's easier to use unsafe code.
Let the unmanaged function return a pointer to the first byte in the array. Let that function take a parameter in wich to store the length of the array.
Then you could use unsafe C# code to get the byte array.
int length;
byte* ptr = UnmanagedFunction(&length);
byte[] bytes = new bytes[length];
for(int i = 0; i < length; i++)
{
bytes[i] = *(ptr+i);
}