草庐IT

托管所

全部标签

c# - 将数据从非托管代码传递到托管代码

我有一个三层应用程序:托管C#层。托管的c++/cli层。非托管C++层。第二层作为c#和nativec++的通信层。publicclassManagedResult{publicfloat[]firstArray;publicfloat[]secondArray;}和非托管类classUnmanagedResult{public:float*firstArray,secondArray;intarrayLength;UnmanagedResult(){};~UnmanagedResult(){};}我在第二层有一个输出托管对象的类的以下方法:ManagedResult^CLICont

c++ - 在托管 C++ 类库中使用 System::Drawing 命名空间

我正在将一些函数从托管C++Winforms应用程序移动到类库,以便我可以在我正在编写的新C#应用程序中调用它们。然而,其中一个函数返回一个System::Drawing::Bitmap^并使用System::Drawing::Color类,这导致了一个错误,指出System不包含名为Drawing的命名空间...显然是这样,但我猜测,由于类库本身并不像winform那样具有图形元素,因此可能需要额外的步骤来访问该功能吗?我需要添加/链接到什么?提前谢谢你。托尼。 最佳答案 您可能需要添加对System.Drawing.dll的引用

c++ - 如何获取指向托管 activex 控件的 <object> 标记的 IHTMLElement 指针

我有一个由FireBreath框架(http://firebreath.org)生成的ActiveX控件。我需要在托管C++插件的页面中获取对标记的引用。如果我使用NPAPI,我会使用NPNVPluginElementNPObject常量和NPN_GetValue。为了确保我表达清楚,假设我在页面中有以下内容:我想获得对插件的引用,就像我使用document.getElementById("testPlugin")时一样,除了从为该mimetype插入的activex控件的C++代码中。请注意,将id作为传递对我来说不是一个好的选择,但如果有一种方法可以从activex控件内部获取ID

c# - 混合 C#、托管 C++ 和非托管 C++ 应用程序的日志记录框架

具体背景:我有一个用C#编写的Word加载项。此插件调用为另一个用C++编写的应用程序(EndNote)开发的插件,该插件进一步分为托管和非托管代码。C#代码从一个进程运行,而C++代码从另一个进程运行。此外,C++代码是多线程的。我一直在考虑使用以下一种或组合使用,但我愿意接受其他建议:log4netlog4cxx日志系统.诊断.TraceSystem.Diagnostics.TraceSource你会用什么? 最佳答案 我会选择一个用于C#的框架和一个用于C++的框架(您考虑过log4cplus吗?),然后决定可以轻松调整哪个框

c++ - 托管 C++ dll 的加载程序锁定错误,静态链接到 native C++ 库

我有一个托管的c++dll,其中包含几个托管类,这些托管类依次调用库中的nativec++代码,我已静态链接到该dll。但是,如果我尝试在dll上运行RegAsm.exe,该工具会正确报告“我们没有注册任何类型”,但随后挂起。我很确定这是loaderlock问题,当RegAsm尝试加载它时我的dll挂起。我使用的是VisualStudio2008速成版。让我感到困惑的是,将native代码放入dll时一切正常,但从库中静态链接时却不行。我知道这篇文章类似于thisquestion但我的dll中没有没有DllMain,因此我没有从DllMain运行MSIL代码的风险。此外,遵循对单个文件

c++ - 如何使用非托管 EasyHook 从进程中的任何线程 Hook 方法?

我在使方法Hook正常工作时遇到了一些问题。如果“我”调用被Hook的方法,我就可以让Hook工作。但是当它在进程运行期间自然发生时,它不会被钩住。我的问题可能源于这样一个事实,即我实际上是在我自己生成的线程中设置这些Hook。显然LhSetInclusiveACL()方法需要知道您要Hook的线程。好吧,这是我的问题...我真的不在乎哪些线程应用了钩子(Hook),我希望它们都被钩住。例如,假设我希望“gdi32.dll”库中的CreateICW()方法与整个进程“iexplorer.exe”Hook。不仅仅是来自线程ID号48291或其他。了解哪些线程将调用您感兴趣的Hook例程需

c# - 这可能吗?在 C# 中调用托管 C++ 结构构造函数

我有一个托管的C++类/结构,其中包含接受输入的构造函数。在C#中,我只能“看到”默认构造函数。有没有办法在不离开托管代码的情况下调用其他构造函数?谢谢。编辑:事实上,它的所有功能都不可见。C++:publicclassVector4{private:Vector4_CPPtest;Vector4(Vector4_CPP*value){this->test=*value;}public:Vector4(Vector4*value){test=value->test;}public:Vector4(floatx,floaty,floatz,floatw){test=Vector4_CPP

c# - 我想从 C++ 非托管代码调用 C# 委托(delegate)。无参数委托(delegate)工作正常,但带参数的委托(delegate)使我的程序崩溃

以下是来自未管理的dll的函数代码。它接受一个函数指针作为参数,并简单地返回被调用函数返回的值。extern__declspec(dllexport)int_stdcallcallDelegate(int(*pt2Func)());extern__declspec(dllexport)int_stdcallcallDelegate(int(*pt2Func)()){intr=pt2Func();returnr;}在托管C#代码中,我使用委托(delegate)调用上面的umanged函数。unsafepublicdelegateintmydelegate();unsafepublici

c++ - 将结构句柄从托管转换为非托管 C++/CLI

在C#中,我定义了一个结构:[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]publicstructMyObject{[MarshalAs(UnmanagedType.LPWStr)]publicstringvar1;[MarshalAs(UnmanagedType.LPWStr)]publicstringvar2;};我在C++中有这个结构:publicvaluestructMyObject{LPWSTRvar1;LPWSTRvar2;};在C++的方法中,这是一个从C#调用的公共(public)类:Testi

c# - 具有托管代码问题的静态库

问题(简​​化以使事情更清楚):1.有一个静态链接的static.lib具有递增的功能:externintCallCount=0;intTheFunction(){void*p=&CallCount;printf("Functioncalled");returnCallCount++;}2.static.lib链接到一个托管的C++/CLImanaged.dll,它包装了TheFunction方法:intManaged::CallLibFunc(){returnTheFunction();}3.测试应用程序具有对managed.dll的引用并创建调用C++/CLI包装器的多个域:sta