帮你顶下吧,别沉了。我看了下,对你说的那个不熟悉。

解决方案 »

  1.   

    MFC中没有用过clr,但是下面的MSDN资料可以参考检查一下:/clr 限制
    请注意下列对使用 /clr 的限制: 用 /clr 时,使用运行时错误检查无效。 
    当 /clr 用于编译不使用 C++ 的托管扩展的程序时,下列规则适用于内联程序集的使用: 
    如果内联程序集代码假定有关本机堆栈布局、当前函数外部的调用约定或其他有关计算机的低级别信息的知识,则如果将该知识应用于托管函数的堆栈帧,则此内联程序集代码可能失败。包含内联程序集代码的函数被生成为非托管函数,就像它们放在不是用 /clr 编译的单独模块中一样。 
    传递复制构造函数参数的函数中的内联程序集代码不受支持。 
    不能从用 /clr 编译的程序调用 vprintf 函数。 
    naked __declspec 修饰符在 /clr 下被忽略。 
    在 /clr 下不允许对类使用 dllexport 或 dllimport。 
    _set_se_translator 设置的转换器函数将只影响非托管代码中的 Catch。有关更多信息,请参见使用 C++ 托管扩展处理异常。 
    在 /clr 下不允许比较函数指针。 
    在 /clr 下不允许使用未完全保持原型的函数。 
    /clr 不支持下列编译器选项:/GL、/Zd、/ZI 或 /Z7、/ML 和 /MLd、/Gm、/YX 和 /RTC。 
    将 /Zi 与 /clr 一起使用时,会对性能造成一些影响;有关更多信息,请参见 /Zi。 
    如果将宽字符传递给 .NET Framework 输出例程,但没有同时指定 /Zc:wchar_t 或没有将字符转换为 __wchar_t,则将导致输出显示为 unsigned short int。例如: 
    Console::WriteLine(L' ')              // will output 32
    Console::WriteLine((__wchar_t)L' ')   // will output a space
    在用 /clr 编译时将忽略 /GS,除非函数在 #pragma unmanaged 下面,或者函数必须编译到本机(在这种情况下,编译器将生成警告 C4793,而默认情况下该警告关闭)。 
    有关托管应用程序的函数签名要求,请参见 /ENTRY。 在创建托管映像时,使用 /ENTRY 指定的函数必须具有 (LPVOID var1, DWORD var2, LPVOID var3) 的签名。
    采用数量不固定的参数的函数 (varargs) 将作为本机函数生成。可变参数位置中的任何托管数据类型都将被封送为本机类型。请注意,System::String* 类型实际上是宽字符字符串,但它们被封送为单字节字符字符串。因此,如果 printf 说明符是 %S (wchar_t*),它将改为封送为 %s 字符串。