相关疑难解决方法(0)

C++/C#解决方案中没有的任何CPU

我有一个包含C#和托管C++项目的解决方案.它在解决方案平台x64和x86中编译.由于它是托管C++,我想创建一个'Any CPU'解决方案并摆脱旧的解决方案.

我将C++项目链接器设置更改为x64和x86的强制安全IL映像.

接下来,使用Configuration Manager,我创建了一个名为"Any CPU"的新解决方案平台.接下来我添加了一个名为"Any CPU"的项目平台.

我继续将所有C#项目设置为"任何CPU",但对于C++我不能这样做.项目平台'Any CPU'不在下拉列表中,也没有选项'New ...'.

VS是关于它的,所以我保持它就像它并开始构建.令我惊讶的是,结果DLL(来自C++项目)是MSIL,即使C++的平台是x64.编译x32时也是如此,生成的DLL在MSIL中.

是什么赋予了?为什么我不能将C++项目设置为"任何CPU"?

c# c++ managed anycpu

16
推荐指数
2
解决办法
9560
查看次数

C++/CLI MSIL程序集中的指针数组

我正在尝试包装一些遗留的C代码,以便与在.NET Core上运行的C#一起使用.我正在使用这里给出的方法来创建一个编译为纯MSIL的C++包装器.它适用于简单的函数,但我发现如果我的代码使用指针指针或指针数组,它会因内存违规而崩溃.它经常崩溃Visual Studio,我必须重新启动所有东西,这是乏味的.

例如,以下代码将导致崩溃:

public ref class example
    {
    public:

        static void test() {
            Console::WriteLine("\nTesting pointers.");

            double a[5] = {5,6,7,8,9}; //Array.
            double *b = a; //Pointer to first element in array.

            Console::WriteLine("\nTesting bare pointers.");
            Console::WriteLine(a[0]); //Prints 5.
            Console::WriteLine(b[0]); //Prints 5.

            Console::WriteLine("\nTesting pointer-to-pointer.");
            double **c = &b;
            Console::WriteLine(c == &b); //Prints true.
            Console::WriteLine(b[0]); //Works, prints 5.
            Console::WriteLine(**c); //Crashes with memory access violation.

            Console::WriteLine("\nTesting array of pointers.");
            double* d[1];
            d[0] = b;
            Console::WriteLine(d[0] == b); //Prints false???
            Console::WriteLine(b[0]); //Works, prints …
Run Code Online (Sandbox Code Playgroud)

.net c# clr cil c++-cli

8
推荐指数
1
解决办法
251
查看次数

标签 统计

c# ×2

.net ×1

anycpu ×1

c++ ×1

c++-cli ×1

cil ×1

clr ×1

managed ×1