У меня есть старая функция C ++, которую я должен использовать в своем приложении .NET. Каждый раз, когда я пытался вызвать и привести указатель обратно в класс, я получаю сообщение об ошибке, указывающее, что я пытался читать или писать в защищенную память. Может ли кто-нибудь помочь мне указать мне правильное направление, пожалуйста. Вот коды:
typedef struct
{
char szModel[32];
float fSpeed;
float fData[20];
} CAR, far *LP_CAR;
//Function prototype
int FAR PASCAL Process(char szModel[32], LP_DATA pCar);
И мои .NET коды:
[DllImport("Unmanaged.dll", CharSet = CharSet.Ansi)]
public static extern int Process(string model, IntPtr data);
//****** Implementation **********
public class ManagedClass
{
public string szModel = new string(new char[32]);
public float fSpeed;
public float[] fData = new float[20];
}
ManagedClass aCar = new ManagedClass();
IntPtr ptr = Marshal.AllocHGlobal(Marshal.Sizeof(aCar));
Marshal.StructureToPtr(aCar, ptr, false);
Process(aCar, ptr);
ManagedClass model2 = (ManagedClass)Marshal.PtrToStructure(ptr,
typeof(ManagedClass));