标签: c++-cli

在C ++。net中将引用或指针传递给托管类型作为参数

我真的对此感到困惑-我知道如何在VB,非托管C ++和C#中执行此操作,但是由于某些原因,我不能接受C ++中托管类型的ref变量。我敢肯定,确实有一个简单的答案-但这是C#等效项:

myClass.myFunction(ref variableChangedByfunction);

我尝试过C ++指针-没有骰子。我尝试了ref关键字。没有骰子。我尝试了[out]关键字。没用

我也找不到任何可以清楚说明我的问题的文档。

有任何想法吗?

.net c++-cli

0
推荐指数
1
解决办法
2010
查看次数

b/w托管/非托管和本机代码有什么区别?

非托管代码是本机代码吗?有什么不同之处

任何boduy帮助我.


重复: 本机代码和托管代码之间的区别?

.net c++-cli

0
推荐指数
1
解决办法
1551
查看次数

将Unsigned Long转换为String ^

如何将unsigned long转换为String ^?

我试过了

String ^ mystring = marshal_as<String ^>(myunsignedlong)
Run Code Online (Sandbox Code Playgroud)

但它不起作用!

c++-cli visual-c++

0
推荐指数
1
解决办法
4142
查看次数

如何找到euclide算法的s和t

欧几里得算法的推广

我们已经知道,对于任何两个整数a和b,存在整数s和t,使得+ bt = gcd(a,b).换句话说,gcd(a,b)是a和b的线性组合.gcd(a,b)是两个整数的最小正组合.a和b本身表示为平凡的组合:a = 1·+ 0·b,b = 0·a + 1·b.从这两个开始,Euclid算法的扩展找到了s和t,其存在迄今仅以正式方式建立.

在列中写下两个线性组合,并将Euclid算法的一步应用到左侧.假设a = bp + r.将第二个等式乘以p并从第一个等式中减去它:a = 1·a + 0·b b = 0·a + 1·b r = 1·a +( - p)·b

对最后两个方程应用相同的过程.以这种方式继续,直到左边的Euclid算法停止.在右边,将有我们追求的线性组合.让我们用一个例子来检查:a a = 2322,b = 654.我采用通常的求解线性方程式的约定,省略了线性组合中的所有项,但左侧​​和右侧的两个系数.结果放在一个表中,第四列等于p(从a = bp + r,它在每一步上都会改变.将p的左边的三个数乘以p,然后从它们正上方的数字中减去它们.结果在下一行.

int algoritmoeuclides(int a,int b)
if (a%b==0)
return b;
return algoritmoeuclides(b,a%b);
}


int main(array<System::String ^> ^args)
{
int a=525;
int b=231;
printf("%d",algoritmoeuclides(a,b));
getch();
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的代码,它完美无缺.问题是当我试图找到s和t时.我不知道如何找到它,我在论坛上搜索但是idk是最好的方法来编程这个算法找到S和T.我把所有的解释给你们一个想法.PD:对不起,我的英语不是讲英语的人.任何想法都是一个先例.

algorithm c++-cli visual-c++

0
推荐指数
1
解决办法
547
查看次数

内存泄漏c ++/cli方法

看起来这个方法在调用时会产生内存泄漏.如果我不打电话,那就没有内存泄漏.知道是什么原因引起的吗?

该函数是ac#app调用的c ++/cli dll的一部分.

List<array<Byte>^>^ writejpeg( cv::Mat ovrImagePrevious, List<array<Byte>^>^ overviewOneImages, Dictionary<String^,List<array< Byte >^>^>^ violationAssets, String ^ value, int fileCorruptFlag ) 
{
    vector<uchar> buf1;//buffer for coding
    vector<int> param = vector<int>(2);
    param[0]=CV_IMWRITE_JPEG_QUALITY;
    param[1]=100;//default(95) 0-100
    int img_sz1=ovrImagePrevious.cols*ovrImagePrevious.rows;
    array <Byte>^ hh1 = gcnew array<Byte> (img_sz1);

    if (fileCorruptFlag==1)
    {img_sz1=1;
    hh1=nullptr;}
    else
    {

    cv::imencode(".jpeg", ovrImagePrevious, buf1, param);
    for(int i=0; i <  buf1.size(); i++)
        {
        hh1[i] = buf1[i];
        }

    }

    if(!violationAssets->TryGetValue(value, overviewOneImages))
    {
        overviewOneImages = gcnew List<array<Byte>^>();
        violationAssets->Add(value, overviewOneImages);
    }

    overviewOneImages->Add(hh1);

    return overviewOneImages;


}
Run Code Online (Sandbox Code Playgroud)

更新#1:

当我删除此行时:

overviewOneImages->Add(hh1); …
Run Code Online (Sandbox Code Playgroud)

.net opencv memory-leaks c++-cli visual-c++

0
推荐指数
1
解决办法
323
查看次数

托管代码中未声明的标识符错误... Visual C#

我有一个使用C++/CLI代码的C#项目.我有一个以MainC++/CLI命名的托管类,我有一个名为的非托管类codemain.在C#中,我创建了一个托管类的对象并使用它,但是当我运行我的项目时,我遇到了一些错误 - 大多数是:cm : undeclared identifier.

我的所有代码都是seaCV命名空间.当我在托管类()之外cmseaCV命名空间中定义对象时Main,我的项目运行没有错误,但是当我cm在托管类中定义时,我得到了该错误.问题出在哪儿?

我在seaCV.h文件中的托管类:

#pragma once

#include <iostream>
#include "cv.h"
#include "cvaux.h"
#include "highgui.h"   

using namespace System;

namespace seaCV 
{     
    public ref class Main
    {
        public:
            codemain *cm;            
            Main();  
            ~Main();
            void initizalize(int x, int y, int x2, int y2, int tr_ind);    
    };
}
Run Code Online (Sandbox Code Playgroud)

seaCV.cpp文件:

#include "seaCV.h"
#include "codemain.h"

namespace seaCV
{
    void Main::initizalize (int x, int …
Run Code Online (Sandbox Code Playgroud)

c# c++-cli class visual-studio-2012

0
推荐指数
1
解决办法
1014
查看次数

如何在C++ CLI中将Object ^传递给本机函数

我是C++ CLI的新手,我仍然没有得到新的指针和句柄.

我有一个打开窗口的本机函数.它需要一个父窗口的句柄:

void open(void* parentHwnd);
Run Code Online (Sandbox Code Playgroud)

我应该如何将托管代码中的父窗口传递给此函数?我试图做这样的事情:

void managedOpen(Object^ parent)
{
   interior_ptr<void> ptr = &*parent);
   open(ptr);
}
Run Code Online (Sandbox Code Playgroud)

但是&运算符"不能用于获取具有ref类类型的对象的地址".

我也应该用pin_ptr而不是interior_ptr

clr c++-cli

0
推荐指数
1
解决办法
1079
查看次数

从c#调用本机c ++的Stackoverflow

我试图从C#项目调用本机C++代码.为此,我按照这篇文章中的步骤进行操作.

但是当我在C++文件中创建一个巨大的数组时,我得到了一个stackoverflow异常.这是代码:

//CSharpTest.h

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CpTest.Class1 instance = new CpTest.Class1();
            Console.WriteLine(instance.DoSomething());
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和c ++文件

// CpTest.h

#pragma once

using namespace System;

namespace CpTest {

    public ref class Class1
    {
    public:
        int DoSomething(){
            int arr[640 * 480];
            return 123;
        }
        // TODO: Add your methods for this class here.
    };
}
Run Code Online (Sandbox Code Playgroud)

数组声明导致stackoverflow异常.

早些时候,当我只运行本机C++代码时,我通过增加项目属性中的"堆栈保留大小"来增加堆栈大小.

但对于这种情况,我不知道该怎么做.

c# c++-cli

0
推荐指数
1
解决办法
377
查看次数

msclr未被使用

因此,出于某种原因,我认为msclr在运行时没有被使用.这是代码:

#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>
#include "stdafx.h"
using namespace System;
using namespace msclr::interop;

int main() 
{
const char* message = "Test String to Marshal";
String^ result;
result = marshal_as<String^>(message);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:"C2653:'msclr':不是类或命名空间名称",根本没有任何意义.令我难以置信的是,不仅是我的电脑,还有我尝试使用msclr的任何其他电脑.此外,visual studio没有强调任何内容,因此IDE可以识别名称空间.有人可以帮帮我吗?显然,标题正确定位,因此很多网站已经说明了这种情况.提前致谢.

clr c++-cli

0
推荐指数
1
解决办法
640
查看次数

如何#include在C++/CLI项目中使用nullptr的第三方本机C++标头

我正在尝试编写一个托管C++(又名C++/CLI)库,该库链接到第三方本机C++库.第三方库的头文件包含使用该nullptr关键字的构造函数定义.我的托管项目无法编译,因为托管编译器定义nullptr为托管空引用,而第三方使用它来表示本机/未托管空指针.如何在不修改第三方库的头文件的情况下解决此问题?

有关nullptrvs的参考__nullptr,请参阅:https://msdn.microsoft.com/en-us/library/4ex65770.aspx

c++ c++-cli nullptr

0
推荐指数
1
解决办法
173
查看次数