标签: c++-cli

如何阻止System :: Windows :: Forms :: UserControl擦除它的背景?

我有一个C++/CLI System::Windows::Forms::UserControl派生控件,它只能在新数据输入时自己重绘(一小部分).但是出于某种原因,即使没有任何东西可以在应用程序外部引起它,也会调用OnPaint机制.

这是一个片段:

void Spectrogram::OnPaint(System::Windows::Forms::PaintEventArgs ^e)
{
    // Overidden to stop the background being painted(?)
}

void Spectrogram::AddNewFFTData( float* data, int fataWidth )
{
    Graphics^ gfx = CreateGraphics();

    //now do some drawing

    gfx->Dispose();
}
Run Code Online (Sandbox Code Playgroud)

所以我调用add data方法添加一些新数据,这些数据理论上应该写入前一个条目(清除一些突出显示)并写入新条目.

在那天我曾经开发过MFC/OpenGL应用程序,我要做的第一件事就是覆盖这个OnEraseBackground方法.据我所知,没有明显的方法可以阻止它被删除.我错过了什么?

graphics user-controls c++-cli

1
推荐指数
2
解决办法
1441
查看次数

C++ Array中的C#Array []语法

我有一个在C#中定义的接口,它有一个方法

Array[] Foo();
Run Code Online (Sandbox Code Playgroud)

我需要在用C++/CLI编写的类中实现此接口.我尝试了以下语法

array<array<Object^>^>^ Foo();
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,说明我的返回类型与界面中的类型不匹配.有谁知道如何将C#转换Array[]为C++/CLI?

c# syntax c++-cli

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

C++/CLI语法错误.这是漫长的一天,我的大脑运作不正常

任何人都可以看到这个错误吗?我得到的错误是:

1> MainForm.cpp(71):错误C2059:语法错误:')'

1> MainForm.cpp(72):错误C2143:语法错误:缺少';' 在'{'之前

1> MainForm.cpp(75):错误C2181:非法其他没有匹配if

1> MainForm.cpp(75):错误C2059:语法错误:')'

1> MainForm.cpp(76):错误C2143:语法错误:缺少';' 在'{'之前

码:

if (oMail->From->ToString()->Contains("email@gmail.com")) //Compare to whitelist
{
                mailSend::sendMail("email@gmail.com", "Commands Accepted!", "You are on the whitelist for this server.");
}
else if () //Compare to blacklist
{
                mailSend::sendMail("email@gmail.com", "Commands Rejected!", "You are on the blacklist for this server.");
}
else () // Else do Default Behavior
{
    if (UserSettings::TheInstance2->defaultBehavior->ToString() == "Accept")
    {
                mailSend::sendMail("email@gmail.com", "Commands Accepted!", "Accepted");
    }
    else if (UserSettings::TheInstance2->defaultBehavior->ToString() == "Accept (And add to Whitelist)")
    {
                mailSend::sendMail("email@gmail.com", …
Run Code Online (Sandbox Code Playgroud)

syntax c++-cli visual-c++

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

如何将_bstr_t转换为System :: String

首先,我是C++/CLI的新手.

做了一些研究后,我发现我可以Marshal::PtrToStringBSTR用来转换IntPtrSystem::String.那么,有没有办法将我的_bstr_t变量转换为一个,IntPtr以便我可以将它传递给提到的函数并进行转换?

要么,

_bstr_t变量转换为的正确方法是System::String什么?

c++-cli string-conversion

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

C++ CLI中的Native和Handle指针

我想知道本机指针是否有任何指向托管堆的方式?我知道这将是一件危险的事情,因为堆压缩和GC周期改变了对象地址,但它仍然可能吗?一个例子将不胜感激.

另外,Handle(^)是否真的无法指向本机堆?

谢谢.

c++-cli

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

C++/CLI为什么在托管中不可见

我有c ++ dll,我正在转换为c ++/cli.设置/ clr编译器选项后,我的项目构建正常.但是,当我尝试通过引用ac #project中的dll来引用本机方法时,c#project无法找到它.不设置/ clr构建MSIL的所有源代码,这些代码应该从其他.net程序集中可见吗?为什么我必须创建一个c ++/cli包装类来使本地代码对c#代码可见?

我不清楚c ++/cli是如何工作的......

c++-cli

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

如何在C++中使用operator ^

我在C中理解,运算符^用于逐位EX-OR.在其中一个C++代码中,我看到了以下使用此运算符的行:

 using namespace System::Threading;
 public ref class Expert : public System::Windows::Forms::Form
{
    int i ;
        float a ;


public:
    int count;
    Thread^ th;

     }
Run Code Online (Sandbox Code Playgroud)

^这里是什么意思?

c++ c++-cli

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

将STL字符串从C++/CLI应用程序传递到C++ DLL

我有一个使用OpenCV的C++/CLI项目.我自己在VS 2010中编译了这个版本的OpenCV,我可以在非托管项目中使用它而没有问题 - 当我尝试在托管项目中使用它时,麻烦就开始了.

感兴趣的功能是cv::imread(std::string&, int).简单地从托管模块调用它根本不起作用,在接收端产生<无效指针>.我有点期待它.毕竟,托管代码有自己的std::string实现.

当我创建一个单独的C++文件,从其模块中删除CLI支持并将我的代码放入其中时,事情变得更有趣了.现在,imread获得了一个有效的指针,但其内容被扰乱了.显然,string我传递它包含的字符串指针偏移4个字节,但它预计它在0偏移量.

非托管模块使用与OpenCV相同的CRT DLL,并将所有选项设置为适合正常OpenCV使用的值.为什么会有不同的string布局?我搞不清楚了.

示例代码:

#include <opencv/cv.h>
#include <opencv/highgui.h>

#include <string>

using namespace cv;
using namespace std;

void Run()
{
    string path("C:\\Users\\Don Reba\\Pictures\\Merlin 1D.jpg");

    Mat image(imread(path, CV_LOAD_IMAGE_GRAYSCALE));
    imwrite("image.jpg", image);
}
Run Code Online (Sandbox Code Playgroud)

c++ opencv c++-cli

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

简单的"捕捉"逻辑

我有一个字符串^,它被转换为Uint32在下面的代码中:

try
{
    int newX = System::Convert::ToUInt32(this->cbXSizeBox->Text);
}
catch (FormatException^ e)
{
    printf("\nNot a valid 3-digit number");
    this->cbXSizeBox->Text = System::Convert::ToString(capBoxSize->x);
}
Run Code Online (Sandbox Code Playgroud)

这很好.(FYI capBoxSize-> x是另一个可以评估为uint32的值).

基本上捕获的是捕获cbXSizeBox-> Text(这是一个字符串)的值,回到它的默认值,如果用户输入除数字之外的任何内容(例如2g9).

如果catch块没有捕获格式异常,我想添加代码来将capBoxSize-> x的值更改为它的新有效值.我试图找到一些对编译器说的内容,"如果你抓住了这个异常,就这样做.但是如果你没有捕获异常,那就去做吧." 是否可以在if else语句中包含catch块?

如果您了解我正在尝试做什么,任何建议将不胜感激.

PS在try块中更改capBoxSize-> x的代码实际上并不是我认为的选项.因为这可能会尝试将newX分配给capBoxSize-> X这样的"2ty",这是一个Uint32.这可能会导致错误.

c++ exception-handling c++-cli try-catch

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

堆栈或堆上的这个对象?

在C++/CLI中,以下两个是相同还是不同?

System::String ^source("Hello World");

System::String ^source= gcnew System::String("Hello World");
Run Code Online (Sandbox Code Playgroud)

第一个是堆栈,第二个堆栈吗?
或者他们都在堆?
.Net对象我认为只有引用它们不能在堆栈上创建,这与C++允许我们不同.有人可以解释一下吗?

.net c++-cli heap-memory

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