草庐IT

c++ - 如何将对象从 D 传递到 C++?

我正在尝试与C++和D进行互操作。我今天发现的事情真的让我很困惑:我的程序中没有正确传递对象。最好举个例子。我有一个C++库,我将其编译为目标文件和D程序,我将其与我的库链接并运行。他们在这里:#includeclassColor{public:Color(unsignedint_r,unsignedint_g,unsignedint_b):r(_r),g(_g),b(_b){}unsignedintr,g,b;};classPrinter{public:Printer(){}~Printer(){}staticPrinter*getInstance();voidprint(Color

c# - 如何从托管代码中捕获的 native 异常中获取 native 堆栈跟踪

我有一些托管代码调用一些nativeDLL中的方法(我有适当的符号文件)。有时,该本地方法抛出一个异常,我在托管代码中捕获了该异常。但是,当我从捕获的异常中打印堆栈跟踪时,我只看到托管代码(最后一帧是对native代码的调用......但它看不到native代码中的堆栈跟踪)。如何获取原生调用堆栈?*当我调试代码时,我能够进入native代码,并查看实际的调用堆栈。 最佳答案 获取native堆栈跟踪非常困难。当它通过.NET/native转换层时,native堆栈跟踪已经丢失。所以,你需要在原生代码中捕获它,这也是相当困难的。查看

c++ - 如何在 Visual Studio 2012 中创建 HelloWorld COM Interop

首先,我是COM的新手,目前很困惑。我在MSDN和一般网络上阅读了很多关于COM的文档,但其中很多似乎已经过时且过于复杂。以下是我认为让它发挥作用所必需的。还没有,所以我确定我遗漏了一些东西,但是通过提供我的食谱,我希望有人能发现问题:创建一个C#控制台应用程序项目。我将其命名为CSharpApp创建一个C++ATL项目。我称之为ComLib.Interop。添加类(模板:ATLSimpleObject),我称之为“InteropDemo”在类View中,右键单击IInteropDemo并添加方法HelloWorld。(已删除,保留以确保答案中的编号正确。)编译。将对ComLib.In

c# - Interop.xxxxx.dll 是如何生成的?

我最近接手了一个项目,对VSCOM经验不多,所以如果我问的问题不正确,请原谅我..我有一个生成COMdll的C++项目,我们将其命名为abc.dll。我有另一个引用COMdll的C#项目,但是在引用下,它指向Interop.abc.dll。我删除了目录中的所有abc.dll和interrop.abc.dll以查看项目将如何react,在启动项目时,会自动生成interop.abc.dll。这让我很困惑,因为我不知道interop.abc.dll是如何生成的。所以这是我的问题:如果生成此文件,C#项目最初如何引用interop.abc.dll?如果没有abc.dll开头(我没有构建它),

c# - 从 C# 调用非托管 .dll 的性能

使用以下语法从C#应用程序调用以C++编写的.dll会增加多长时间的典型开销?[DllImport("abc.dll",EntryPoint="xcFoo",CallingConvention=CallingConvention.Cdecl)]publicexternstaticResultFoo(outIntPtrsession,[MarshalAs(UnmanagedType.FunctionPtr)]ObjectCallbackcallback,UInt64turnKey,stringserverAddress,stringuserId,stringpassword);有没有更有

C# 和 C++ 库

我想知道我是否可以使用alibrary-用C++编写-在C#问题是图书馆有自己的结构和类..我可以在C#中使用它吗?谢谢编辑这个库是开源的..所以如果我的要求需要一些特殊的C++代码,我将能够做到... 最佳答案 您不能在托管代码中直接使用C++类。主要问题是无法使用与C++代码相同的内存分配器,并且无法轻松调用构造函数和析构函数。一位微软员工发布了ablogpost以表明这并非不可能。我不建议这样做。COM是一种解决方案,但总是需要相当大的重写和良好的COM编程技能。managedclasswrapper在C++/CLI语言中通常

c# - 在C++中定义一个需要在C#和C++中实现的接口(interface)

我有一个用C++定义的接口(interface),现在需要用C#实现。最好的方法是什么?我根本不想在我的接口(interface)定义中使用COM。我现在解决这个问题的方法是有两个接口(interface)定义,一个在C++中,一个在C#中。然后,我将C#接口(interface)公开为COM服务器。这是我用C++编写的应用程序可以调用C#。无论如何我可以避免在C++和C#中定义我的实现吗? 最佳答案 如果您愿意为托管代码使用C++/CLI而不是C#,那么您可以直接通过头文件使用nativeC++接口(interface)定义。这将

.net - 使用 __declspec(thread) 的线程本地存储在 C++/CLI 中失败

我正在开发一个项目,我们通过C++/CLI层混合.NET代码和nativeC++代码。在此解决方案中,我想通过__declspec(thread)声明使用线程本地存储:__declspec(thread)intlastId=0;但是,在第一次访问变量时,我得到一个NullReferenceException。更准确地说,声明是在ref类(用C++/CLI实现的.NET类)中完成的。我已经阅读过有关__declspec(thread)不适用于延迟加载的DLL的内容。如果我使用.NET,是否会自动使用延迟加载的DLL? 最佳答案 似乎_

c# - native C++ 和 C# 互操作

所以我正在构建一个应用程序,该应用程序必须使用C++工作,但MFC/ATL对我来说太乱了,所以我有一个绝妙的想法,即用原生C++编写所有“思考”代码和所有漂亮的UI代码在C#中。但是,问题在于它们两者之间的互操作性。在我对此太过投入之前,我想知道这是否是一个已解决的问题,并且有一个非常好的方法可以做到这一点。请注意,我不想在同一个模块中混合逻辑和显示,因为它会产生恼人的高耦合。这是我目前所拥有的:那么告诉我,它可以做得更好吗? 最佳答案 处理此问题的最简单方法是使用C++/CLI,并将您的逻辑公开为.NET类型。将原生C++类包装在

.net - COM 互操作 : indexed property signature issues

我正在开发一个项目,该项目是对一个相当大的经典ASP项目的.NET扩展,使用了大量C++COM对象,这些对象一直存在于我们的代码库中。不幸的是,C++端有很多hack-ish代码,我担心我没有足够的经验来解决我遇到的问题。简而言之,我可以实例化有问题的COM对象,VisualStudio告诉我应该能够调用它的“方法”(在引号中,因为它们实际上作为参数化属性公开)。但是,我尝试调用的任何方法都会给我错误“索引属性‘CoreAspLib.IComUser.LoginUser’具有必须提供的非可选参数。”问题是,我使用的参数与经典ASP世界中使用的参数完全相同,甚至属性的IntelliSen