>I have a third-party DLL (unmanaged) for which I am trying to call a
>function. The function requires a structure (as an argument) which utilized
[quoted text clipped - 9 lines]
> /*1 byte*/ bool Succeeded; /*4 bytes*/ char *Error;
> /*4 bytes*/ char *ProjectFiles[7];
You have an array of pointers, which I don't believe .NET can handle, never
mind VB.
You can make this an array of IntPtr, and use Marshal to pin the objects and
fill in all the pointers yourself, or you could write a .NET compatible
wrapper with C++/CLI. The latter is usally much easier, if you have ever
used C or C++ before.
> /*4 bytes*/ int ProjectFilesStart[7];
> byte EEPROM[50];
[quoted text clipped - 25 lines]
> I'd really like to understand why the MarshalAs isn't working (as well as
> how to translate the other lines). Can someone offer some suggestions?
sam - 09 Jun 2007 21:50 GMT
> You can make this an array of IntPtr, and use Marshal to pin the objects
> and fill in all the pointers yourself, or you could write a .NET
> compatible wrapper with C++/CLI. The latter is usally much easier, if
> you have ever used C or C++ before.
After looking for resources on this sort of thing for several days, it
sound like your suggestion of writing a C++ wrapper for this thing might
be the way to go. I can find no examples of something like this on the
web, and every example I do find of marshalling seems to fail with
errors--there appear to be quite a few pratfalls involved. I have some
C++ experience, but writing a managed wrapper might be a better way to
go. I've considered it. Another thing I've considered--I don't even know
if it's possible--is to build a byte array of all this data and then
pass the pointer.