各位大神们,小弟刚刚接触C#不久,这两天再用C#调用C++编写的MFC DLL,有一些问题不明白,想请教大家:(1)原来有这样的一段代码:(C#)
[DllImport("CheckDLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
        static extern bool DoCheck( string strFilepath,  ref bool bHasBook);
        
//........ bool bHasBook = false; DoCheck(ref bHasBook ); // DLL 会对bHasBook进行修改!!
//........我不明白的是,bHasBook这个变量应该在托管内存上,这样让外界的程序随意修改它,虽然可以行得通,但这种做法是不是不太标准?
(2)如果我将传入DLL的所有参数包装成一个结构体,请问如果结构体中含有Boolean 、 int 、 string,那我是不是必须使用Marshal分别为它们去分配非托管堆上的内存?然后才能让DLL进行更改?
之前我的程序没有这么做,总是提示我托管内存被修改的错误!如果我使用结构体进行DLL调用传参,有没有更方便的方式对其中的不同类型的成员进行操作呢?谢谢大家了!!!!