Tag: 互操作

如何从托管代码中捕获的本机exception中获取本机堆栈跟踪

我有一些托管代码调用一些本机DLL内的方法(我有适当的符号文件)。 有时,该本机方法会抛出我在托管代码中捕获的exception。 但是,当我从捕获的exception中打印堆栈跟踪时,我只看到托管代码(最后一帧是对本机代码的调用..但它没有看到本机代码中的堆栈跟踪)。 我怎样才能获得原生的callstack? *当我调试代码时,我可以进入本机代码,并查看实际调用堆栈。

从c#调用vb6 dll

我一直试图从C sharp应用程序调用vb6 dll,而不使用注册表。 我想在使用它时使用dll的路径。 我无法创建vb dll类的对象。 请帮忙! 我到目前为止编写的代码如下: Assembly assem = Assembly.LoadFile(“dll path”); Type classType = assem.GetType(“classname”); MethodInfo method = classType.GetMethod(“show”); //My methos is called show method.Invoke(null,null); // I have to invoke the method using class object, which I am unable to create

可以在c#.net中获取/设置控制台字体大小?

我看过有关更改控制台真实类型字体,控制台颜色(rgb)的post,但没有设置或获取控制台字体大小。 编辑:reason = grid输出到控制台,grid有很多列,更适合更小的字体,想知道是否可以在运行时更改,而不是允许默认或配置字体进行优先级/覆盖inheritance。

在C#中使用C ++代码获取对象function

我在C ++中有一个函数,它调用旧库中的一些函数。 此函数创建一些内存使调用和销毁内存。 为了优化这一点,我将创建一个对象,在对象被销毁之前保持内存分配。 但是,我将从C#调用此函数,并且不相信我可以导出类,只是函数或变量。 我的想法是这样的; 将DLL视为一个类,并使用dll范围内的本地变量来指向内存。 然后有一个函数来创建内存,调用worker函数和另一个函数来完成DLL时破坏内存。 这是一个好方法吗? 有没有更好的办法?

将字符串从C ++传递到C#

我正在使用Photvm,反向PInvoke方案,如Thottam R. Sriram所述http://blogs.msdn.com/b/thottams/archive/2007/06/02/pinvoke-reverse-pinvoke-and-stdcall-cdecl。 ASPX 除了将字符串从C ++传递给C之外,一切似乎都运行良好。 (在Sriram中,字符串是用c#构造的,并且通过c ++不受影响,所以避免了这个问题。) c#代码看起来像这样 class Program { public delegate void callback(string str); public static void callee(string str) { System.Console.WriteLine(“Managed: ” + str); } static void Main(string[] args) { gpscom_start(new callback(Program.callee)); Console.WriteLine(“NMEA COM Monitor is running”); System.Threading.Thread.Sleep(50000); } [DllImport(“gpscomdll.dll”, CallingConvention = CallingConvention.StdCall)] public static extern void gpscom_start(callback call); } C ++代码看起来像这样 […]

作为数组间接c ++返回数据的更快方法

这是一个非常干净和漂亮的解决方案,从非托管C ++代码marsahall结构数组。 它是最简单的完美解决方案,我花了一些时间来理解这个概念,所以在几行代码中,你可以看到C# Main() ,我有一个填充的struct数组准备好’收获’.. typedef struct { int Id; BSTR StrVal; }Package; extern “C” __declspec(dllexport) void dodata(int requestedLength,int StringSize, Package **Packs){ int count; count=0; *Packs = (Package*)LocalAlloc(0, requestedLength * sizeof(Package)); Package *Cur = *Packs; while(count!= requestedLength) { Cur[count].StrVal = NULL; Cur[count].Id = count; Cur[count].StrVal=SysAllocString(L”abcdefghij”); Cur[count].StrVal[StringSize-1]=count+’0′; ++count; } } C# [DllImport(@”ExportStructArr.dll”, CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] […]

如何在UWP应用程序中创建COM对象? (C#)

问题:如何在通用Windows平台(UWP)应用程序中创建COM对象? 动机:我想从WPF切换到UWP。 由于我的工作量要求只能通过COM访问第三方库(据我所知),我需要从UWP进行COM调用。 语境: C# 。净 Visual Studio 2015 Windows 10 理想情况下针对所有UWP设备,但如果仅限于台式机/笔记本电脑,则可以。 背景 在Visual Studio 2013(Visual Studio 2015中的“经典桌面”项目)中,我使用了C#代码 // Conceptual: DotNetInterface comObjectInstance = (DotNetInterface)Microsoft.VisualBasic.Interaction.CreateObject( “this string specified the COM object type” ); // Example: Open Excel via COM: Excel.Application oApp = (Excel.Application)Interaction.CreateObject(“Excel.Application”); Visual Studio项目需要对Microsoft.VisualBasic的引用才能使用Interaction.CreateObject()和COM对象的类型库。 我想在Windows 10 Education上的Visual Studio 2015 Enterprise生成的通用Windows平台(UWP)应用程序中使用此C#代码。 我能够添加对COM对象的类型库的引用,但无法引用Microsoft.VisualBasic因为它没有出现在Visual Studio的Reference Manager中。 思考,尝试过的解决方案,猜测等 我添加了对“UWP的Windows桌面扩展”的引用,希望它可以启用对普通.NETfunction的调用,但还没有弄清楚如何使用它。 […]

将helpstring属性应用于通过COM接口公开的C#属性

我目前正在开发一个库,该库将暴露给COM,用于正在升级的旧项目中。 我正在创建要公开的接口,并且它们具有long,int等类型的属性。 使用DescriptionAttribute,我可以获得.tlb中为接口,类和方法生成的帮助字符串,但由于某种原因,它似乎不想用于属性。 反正有没有在TLB输出中为属性生成一个帮助字符串?

不导出成员函数时,从C#调用C ++本机/非托管成员函数

我有一个非托管DLL,只导出一个C风格的工厂方法,它返回一个类的新实例(这里简化为简单)。 hello.h #if defined(HWLIBRARY_EXPORT) // inside DLL # define HWAPI __declspec(dllexport) #else // outside DLL # define HWAPI __declspec(dllimport) #endif struct HelloWorld{ public: virtual void sayHello() = 0; virtual void release() = 0; }; extern “C” HWAPI HelloWorld* GetHW(); HELLO.CPP #include “hello.h” struct HelloWorldImpl : HelloWorld { void sayHello(){ int triv; std::cout<>triv; }; void release(){ […]

单步执行.NET Class包装的VB6 COM对象

我有一个由.NET类包装的VB6对象。 据我所知,只需运行VB6库并在所需位置插入断点即可逐步执行VB6对象(编译为库)。 然而,这似乎并不适用于我的情况。 我试图重新编译VB6对象并在我的.NET项目中重新引用它,但这似乎没有帮助。 我从哪里去? 有没有办法将Debugger.Launch()等效插入到VB6项目中? 任何帮助,将不胜感激!!