使用PictureBox时的性能问题
我正在研究Visual Studio 2010中的应用程序,并且正在用C ++/CLI进行编码. 在我以前的问题中,我对串行端口的数据系列有问题.现在似乎还可以,现在我试图绘制它们. 我不想使用Chart,所以我想使用使用类Graphics的手工函数.为了测试我的代码,我创建了两个数组:第一个数组中充满了来自高斯的值.第二个充满了随机数. 当我绘制值时,我希望看到我的情节像示波器一样在增长和更新.第二个Do_Plot设法"删除"点绘制后彩色. 所有代码都按预期工作,但我遇到了表演问题.如果我在PC上运行代码,我的系列每500/700毫秒绘制一次. 有时它会减少到1500ms,然后再回来更快. 我试图在我的同事的PC上运行代码,并注意到该系列在第一个绘制每170ms上每170ms绘制,而该系列的系列是第二个系列的每950ms绘制的. 这是代码: System::Void Form1::button1_Click(System::Object^ sender, System
0 2023-05-24
编程技术问答社区
从C++中调用C#代码,但ExecuteInDefaultAppDomain()限制太大
我需要能够从C ++调用任意C#函数. introcess introcess互操作性 建议使用IclRruntimeHost :: executeIndeFaultAppDomain(),但这仅允许我调用具有此格式的方法:int method(string arg) 调用任意C#函数的最佳方法是什么? 解决方案 用/clr 标志编译C ++代码.因此,您可以相对轻松地调用任何.NET代码. 例如: #include #include int _tmain(int argc, _TCHAR* argv[]) { System::DateTime now = System::DateTime::Now; printf("%d:%d:%d\n", now.Hour, now.Minute, now.Second); return 0; } 这是否算作" C ++"?好吧,显然不是标准C ++ .
12 2023-05-23
编程技术问答社区
用pdfsharp添加acroform
如何将pdfsharp lib的Acroforms(或任何输入场)添加到PDF? 例如文本框(pdfsharp :: pdf :: Acroforms :: pdftextfield) 我找不到任何示例,只读/修改. 我找到了" page-> elements--> add(key,pdfitem)",但我无法从pdfsharp :: pdf :: pdf :: acroforms :: pdftextfield或其他形式(no constructor) 创建一个对象. 解决方案 不知道它是否仍然相关(也许与其他用户相关),但是不幸的是,不可能使用PDF Sharp来做到这一点,好像它也具有该功能,那本来是一个非常不错的圆形图书馆.库的AcroFrom功能仅允许定位已经存在的一个. 根据您的项目是什么,您可以使用Itext Sharp,但是它具有不理想的AGPL许可证,还有其他图书馆,但它们非常昂贵.如果它是一个小PDF文件(在10页以下),则可以使用SpirePDF库
0 2023-05-22
编程技术问答社区
如何从托管DLL中获得可执行路径
我有一个托管DLL(用C ++/CLI编写),其中包含C#可执行文件使用的类.在课堂的构造函数中,我需要访问可执行的引用DLL的完整路径.在实际的应用程序中,我知道我可以使用应用程序对象来执行此操作,但是我该如何从托管的DLL进行操作? 解决方案 Assembly.GetCallingAssembly() 或 Assembly.GetExecutingAssembly() 或 Assembly.GetEntryAssembly() 取决于您的需要. 然后使用位置或代码库属性(我永远不记得哪一个). 其他解决方案 @leppie:谢谢 - 那是我需要的指针. 供将来参考,在C ++/CLI中,这是有效的实际语法: String^ appPathString = Assembly::GetEntryAssembly()->Location; GetExecutingAssembly()提供了dll的名称 GetCalling
0 2023-05-21
编程技术问答社区
在C++中,我可以有一个通过引用传递参数的函数/方法和一个通过值传递参数的重载吗?
在C#中,这肯定是可能的,因为此汇编示例可以显示: static void Teste(int x) { } static void Teste(ref int x) { } static void Teste() { int i = 0; Teste(i); Teste(ref i); } 但是可以用构造函数在C ++(/CLI)中完成吗?请参阅下面的示例: class Foo { Foo(int bar) { // initializing "Foo" instance... } Foo(int &bar) { // initializing "Foo" instance... } //... } 尽管此类确实与这些构造函数编译,但我看不到我在应用一个构造方是对另一个构建器的选择,也就是说,呼叫是Ambiguos,因为我对此目的没有关键字为" Ref"
14 2023-05-20
编程技术问答社区
在C++/CLI中引用和输出
我知道C ++/CLI代码 void foo(Bar^% x); 转变为 Void foo(ref Bar x); 变成 的C ++/CLI代码是什么 Void foo(out Bar x); ? 解决方案 您可以使用OutAttibute: using namespace System::Runtime::InteropServices; void foo([Out] Bar^% x); 其他解决方案 C ++/CLI中没有这种特定的语法.我认为您可以通过添加OutAttribute来修改参数来相当接近.但是我不确定与C#out完全相同的语义. out的概念在很大程度上仅限于C#. CLR实际上只看到ref参数. out概念是通过我相信的mod opt实现的,大多数语言都会忽略它. 其他解决方案 "对不起我的英语",例如,您有"指针": int a = 0; int *b = &a; // '*' mean
2 2023-05-20
编程技术问答社区
在C++/CLI中通过引用传递一个参数,因此重新分配会影响到调用者。
可能这不是一个困难的问题,但是我总是对如何将字符串类型视为视觉C ++的参数有些困惑.我有以下功能: void function_1(String ^str_1) { str_1 = gcnew String("Test"); } void function_2() { String ^str_2 = nullptr; function_1(str_2); } 呼叫function_1后,str_2仍然等于null,但是我要实现的是str_2等于Test.那么,如何将str_1的内容传递给function_2? 感谢您的任何建议. 解决方案 使用跟踪参考参考 : void function_1(String ^%str_1) { str_1 = gcnew String("Test"); } 说明:传递String ^就像传递指针一样.更改仅对参考的本地副本进行. String ^%就像传递对参考的参考...就像您在调用应更改原始指针的
2 2023-05-20
编程技术问答社区
在C++/CLI中,我如何声明和调用一个带有'out'参数的函数?
我的函数将一个字符串解析为两个字符串.在C#中,我会这样声明: void ParseQuery(string toParse, out string search, out string sort) { ... } ,我会这样称呼: string searchOutput, sortOutput; ParseQuery(userInput, out searchOutput, out sortOutput); 当前项目必须在C ++/CLI中完成.我尝试了 using System::Runtime::InteropServices; ... void ParseQuery(String ^ toParse, [Out] String^ search, [Out] String^ sort) { ... } 但是,如果我这样称呼: String ^ searchOutput, ^ sortOutput; ParseQuery(use
4 2023-05-20
编程技术问答社区
从C#调用C++/CLI,不含参数
需要一些引用才能更好地理解 out 参数(以及使用的'%'运算符)与C ++/CLI接口时. 使用VS2012和此MSDN参考: c ++ dll代码与/clr 编译 #pragma once using namespace System; namespace MsdnSampleDLL { public ref class Class1 { public: void TestOutString([Runtime::InteropServices::Out] String^ %s) { s = "just a string"; } void TestOutByte([Runtime::InteropServices::Out] Byte^ %b) { b = (Byte)13; } }; } 和C#
0 2023-05-19
编程技术问答社区
C++/CLI: 只对返回类型进行重载是否可行?
如果我很好地理解,在C#中,可以做 public class X : ICloneable { public X Clone() { ... } object ICloneable.Clone() { return Clone(); } // This calls the above } 根据此线程. C ++中禁止这种超载,因为它仅取决于返回类型. 现在,我想在C ++/CLI中使用ICloneable进行此确切的事情.有办法吗? 解决方案 C#中允许这种超载类型不是因为不同的返回类型,而是因为接口的明确实现 - ICloneable.Clone. 关于C ++/CLI的外观:其他解决方案 我终于找到了一种方法: public ref class X : public ICloneable { virtual System::Object^ Clone2() sealed = ICloneable::Clone; publi
4 2023-05-15
编程技术问答社区
C++/CLI相当于C#的检查关键字
在C ++/CLI中,托管代码是否可以在算术溢出上抛出异常? C#具有检查的关键字和全局项目标志来启用这些标志,但是我在C ++/CLI ... 中均未找到 我的情况是我将C ++ libs包装在.NET中.有时C ++本机代码溢出.我正在/正在考虑将一些敏感计算移至现有的C ++/CLI包装器,但这也许是不可能的? 解决方案 链接的副本没有任何意义,C ++/CLI遵循C ++约定. C ++没有用于检测算术溢出的内置机制. 最初计划使用检查和未选中的关键字,以将来用于C ++/CLI的将来扩展. 因此,您必须实施溢出检查自己.您会在中找到一些指导. P>
4 2023-05-15
编程技术问答社区
什么是相当于C#检查的C++?
我希望避免托管C ++(CLI)中的溢出.在C#中,有一个未检查的关键字,在C ++中,溢出并不是例外. 供参考,未检查的记录unchecked { int1 = 2147483647 + 10; //this overflows in CLI but is ok in C# and C++ } 在C#中,它不会溢出,而是通过服用最小的位来转换为INT.例如,当您计算哈希代码时,这是合适的. 注意:我意识到没有同等的C ++关键字,但是一些位的转移应该可以解决问题; 解决方案 您只能在方法周围使用#pragma unmanaged在本机C ++中获得正常的未检查的行为. 其他解决方案 使用无符号数据类型进行位操作和检查.无签名行为的环绕行为在C ++中明确定义.
4 2023-05-15
编程技术问答社区
管理的C++/CLI方法中的可选参数
在C#? 中使用时,我如何在C ++/CLI中声明具有可选参数的托管方法 我已经用可选和a 请参阅:如何编码默认参数值),但是只有可选属性才能尊重. c ++/cli: public ref class MyClass1 { public: MyClass1([System::Runtime::InteropServices::Optional] [System::Runtime::InteropServices::DefaultParameterValue(2)] int myParam1) ↑ { System::Console::WriteLine(myParam1); } }; c#: var myInstance1 = new MyClass1(); // compiles and runs 输出
2 2023-05-12
编程技术问答社区
在x64模式下从C++/CLI调用MASM PROC会产生意外的性能问题
我正在编写一个任意精度整数类,要在C#(64位)中使用.目前,我正在使用递归分隔和诱导算法进行乘法例程,将多位乘积分解为一系列原始的64-128位乘积,其结果是通过简单重新组合的添加.为了获得显着的性能提升,我正在用本机X64 C ++编写代码,该代码嵌入了C ++/CLI包装器中,以使其可从C#代码中调用. 到目前为止,这一切都很好,就算法而言.但是,我的问题是对速度的优化.由于64到128位的乘法是这里的真正瓶颈,因此我试图在此处优化代码.我的第一个简单方法是C ++函数,该功能通过执行四个32到64位乘法来实现此乘法,并以几个偏移和添加的方式重新组合结果.这是源代码: // 64-bit to 128-bit multiplication, using the following decomposition: // (a*2^32 + i) (b*2^32 + i) = ab*2^64 + (aj + bi)*2^32 + ij public: static void
0 2023-05-12
编程技术问答社区
C++/CLI:如何重载一个操作符以接受引用类型?
我正在尝试使用超载运算符创建一个CLI值类C_Location,但我认为我对拳击有一个问题.我已经在许多手册中实现了运算符重载,因此我敢肯定这一定是正确的. 这是我的代码: value class c_Location { public: double x, y, z; c_Location (double i_x, double i_y, double i_z) : x(i_x), y(i_y), z(i_z) {} c_Location& operator+= (const c_Location& i_locValue) { x += i_locValue.x; y += i_locValue.y; z += i_locValue.z; return *this; } c_Location operator+ (const c_Location& i_locValue) { c_Location locVal
2 2023-05-12
编程技术问答社区
使用OpenXml SDK和C++/CLI替换docx文件中的书签
我正在尝试使用Open XML SDK概念替换DOCX中的书签. 以下代码将从Word文档中获取书签,并检查书签是否匹配字符串"版本",如果它是true,则将其替换为DOCX文件中的字符串" 0000". Paragraph ^paragraph = gcnew Paragraph(); Run ^run = gcnew Run(); DocumentFormat::OpenXml::Wordprocessing::Text^ text = gcnew DocumentFormat::OpenXml::Wordprocessing::Text(“0000”); run->AppendChild(text); paragraph->AppendChild(run); IDictionary ^bookmarkMap = gcnew Dictionary
22 2023-05-11
编程技术问答社区
使用OpenGL直接向.NET位图作画
我想使用OpenGL直接绘制到.NET System :: Draws :: bitmap(C ++/CLI).似乎应该这样工作: char buf[48]; ZeroMemory( &buf, sizeof(buf)); System::Drawing::Bitmap bmp( 4, 4, 12, Imaging::PixelFormat::Format24bppRgb, (System::IntPtr)buf); Graphics^ g = Graphics::FromImage(%bmp); HDC local_hdc = (HDC)((void*)g->GetHdc()); HGLRC local_hrc = wglCreateContext( local_hdc ); if(!wglMakeCurrent( local_hdc, local_hrc )) ShowError(); //Draw something with
0 2023-05-10
编程技术问答社区
试图将C++转换为C#的互操作性
我有一个程序,可以在C ++中调用EGL.我想在C#中进行相同的呼叫,但在C#中似乎并没有等效的概念. 当执行上下文输入C ++ EGL代码时,我会得到读/写入访问拒绝的错误. 这是我要转换为C#的C ++程序中的代码: PropertySet^ surfaceCreationProperties = ref new PropertySet(); surfaceCreationProperties->Insert(ref new String(EGLNativeWindowTypeProperty), somethingOtherThanAWindow); mEglSurface = eglCreateWindowSurface(mEglDisplay, config, reinterpret_cast(surfaceCreationProperties), surfaceAttributes)); 我有一个C#类,该类将C#EGL调
0 2023-05-10
编程技术问答社区
如何持续更新glut窗口?
我有一个真正的机器人,该机器人正在订购我的虚拟机器人.我想在网上显示主机器人(真实机器人)的每个动作(真正的机器人)在线,因此我需要不断地更新我的Glut窗口,实际上,只要Real机器人也移动我的虚拟一个人,所有这些都需要运动应该在线. 我从Master始终通过GET数据功能获取数据,但是我不知道该如何更新窗口. 这是我的代码: * ** * ** * ** ** ** ** ** * ** * ** * ** ** ** * ** * ** * ** * ** ** **** / void OnIdle(void){ initSocket(); printf("\n Defining Step Time Parameters and Initial Conditions for solving Dynamic equations\n"); xi=0; xf=0.1; printf("\n end value x
0 2023-05-10
编程技术问答社区
OpenCV的内存泄漏问题
DrawItem的此函数通过循环多次调用,每次调用时,我都会面临内存泄漏问题.我认为问题是由于resizeImage()函数引起的,但是我似乎无法指出问题,这是带有OpenCV库的C ++ \ CLI. . drawItem() { imgItem = resizeImage(imgItem, newItemWidth, newItemHeight, false); imgMask = resizeImage(imgMask, newItemWidth, newItemHeight, false); cvSetImageROI(image3, cvRect(x1,y1,newItemWidth, newItemHeight)); cvCopy(imgItem, image3, imgMask); cvResetImageROI(image3); cvReleaseImage( &imgItem ); cvReleaseImage( &imgMask ); } IplImage* r
0 2023-05-10
编程技术问答社区