Tag: unmanaged

使用哪一个:托管与非托管哈希算法

在常规的C#应用​​程序中,哪个类用于散列: xxxManaged或xxx (即SHA1Managed vs SHA1 )以及为什么?

如何正确地将char *从非托管DLL返回到C#?

function签名: char * errMessage(int err); 我的代码: [的DllImport( “api.dll”)] internal static extern char [] errMessage(int err); … char [] message = errMessage(err); 这会返回一个错误: 无法封送“返回值”:无效的托管/非托管类型组合。 我究竟做错了什么? 谢谢你的帮助。

在C#和C之间传递对象

我的应用程序包含带有非托管C dll调用的C#代码。 在我的C#代码中,我有一个对象/类,其属性是系统类型,如string和int以及我定义的其他对象。 我想将这个复杂的(Graph.cs)对象传递给我的C(dll)代码,你会在这里建议什么实现? 我已经尝试过移动结构但是我没有使用除了string和int之外的任何东西。 谢谢。 码: public Class Grpah { TupleCollection m_TupleCollection; int m_nGeneralIndex; bool m_bPrintWRF; string m_sLink; } public Class TupleCollection { IList _collection; } public Class Tuple { Globals.TupleType m_ToppleType; ArrayList m_Parameters; } public class TupleArgs { public string Value { get; set; } public Globals.PAS PAS; public RefCollection RefCollection { get; […]

从没有COM的非托管C ++应用程序调用C#dll

有没有办法在没有COM使用的情况下从c ++非托管应用程序调用c#dll?

C#到C ++ / CLI到C DLL System.IO.FileNotFoundException

我收到System.IO.FileNotFoundException: The specified module could not be found运行调用C ++ / CLI程序集的C#代码时System.IO.FileNotFoundException: The specified module could not be found ,C ++ / CLI程序集又调用纯C DLL。 只要实例化一个调用纯C DLL函数的对象就会发生这种情况。 BackingStore是纯C.CPPDemoViewModel是C ++ / CLI调用BackingStore它有一个对BackingStore的引用。 我尝试了最简单的案例 – 添加一个新的C#unit testing项目,它只是试图创建一个在CPPDemoViewModel中定义的对象。 我从C#项目添加了一个引用到CPPDemoViewModel。 只需添加对CPPDemoViewModel的引用,C ++ / CLI测试项目就可以正常工作,因此它可以在语言之间进行。 我正在使用Visual Studio 2008 SP1和.Net 3.5 SP1。 我正在构建Vista x64,但一直小心确保我的平台目标设置为x86。 这感觉就像一些愚蠢和明显的我想念但是浪费时间试图私下解决它会更加愚蠢,所以我在这里让自己尴尬! 这是对一个移植大量遗留C代码的项目的测试,我将其保存在一个带有在C ++ / CLI中实现的ViewModel的DLL中。 编辑检查目录后,我可以确认尚未复制BackingStore.dll。 我有一个标准的独特项目文件夹,使用典型的多项目解决方案创建。 WPFViewModelInCPP 备份存储 […]

将字节数组封送到C#结构

我正在研究用于读取FAT32引导扇区和BPB的C#项目,问题是我正在使用编组机制将字节数组转换为自定义FAT32数据结构。 我收到一条消息错误说:无法从程序集’FAT32Management,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null’加载类型’FAT32Management.Fat32BootSector’,因为它包含偏移3处的对象字段,该字段未正确对齐或重叠由非对象字段。 我无法解决问题 这是代码 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; namespace FAT32Management { [StructLayout(LayoutKind.Explicit)]//, CharSet = CharSet.Ansi, Size = 96, Pack = 1)] public struct Fat32BootSector { #region Common Region With all FAT systems /// /// First 3 Bytes of the Jump insctructions. /// Offset […]

从delphi2006调用.net dll来显示wpf表单

我正在使用Robert Gieseckes伟大的Unmanaged Exports从Delphi2006调用ac#-Dll。 如果我使用输入和输出的简单过程和函数,一切都很好。 但现在我想通过调用OpenMyWindow()显示一个Wpf-Window。 在这里,我得到一个“外部例外E0434352”。 我不知道为什么这不起作用。 无论如何,我认为这与wpf方面的初始化有关。 这是Delphi代码: unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; procedure OpenMyWindow(); stdcall; external ‘ClassLibraryToDelphi.dll’; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin OpenMyWindow(); end; end. 现在是c#部分(它是一个将UserControl改为窗口的ClassLibrary): using System.Linq; […]

托管C ++以形成c#和C ++之间的桥梁

我有点生疏,实际上我的C ++真的很生疏。 从大学一年级开始就没有触及它,所以已经有一段时间了。 无论如何,我正在做与大多数人相反的事情。 从C ++调用C#代码。 我在网上做了一些研究,似乎我需要创建一些托管C ++来形成一个桥梁。 使用__declspec(dllexport)然后从中创建一个dll并使用整个东西作为包装器。 但我的问题是 – 我真的很难找到例子。 我找到了一些基本的东西,有人想将C#版本用于String.ToUpper(),但这是非常基本的,只是一个小代码片段。 任何人都有任何想法,我可以在哪里寻找更具体的东西? 注意,我不想使用COM。 目标是根本不触及C#代码。

将char指针从C#传递给c ++函数

我被困在c#实现方面,因为我对它很陌生。 问题是,我想从c#代码传递一个’指针’(有内存),这样我的c ++应用程序就可以将pchListSoftwares缓冲区复制到pchInstalledSoftwares。 我无法弄清楚如何从c#侧传递指针。 本机c ++代码(MyNativeC ++ DLL.dll) void GetInstalledSoftwares(char* pchInstalledSoftwares){ char* pchListSoftwares = NULL; ….. ….. pchListSoftwares = (char*) malloc(255); /* code to fill pchListSoftwares buffer*/ memcpy(pchInstalledSoftwares, pchListSoftwares, 255); free(pchListSoftwares ); } 传递简单的’字符串’不起作用…… C#实现 [DllImport(“MyNativeC++DLL.dll”)] private static extern int GetInstalledSoftwares(string pchInstalledSoftwares); static void Main(string[] args) { ……… ……… string b = “”; GetInstalledSoftwares(0, b); […]

从C ++传递一个函数指针,由C#调用 – 函数的参数包括一个宽字符串(LPCWSTR)

我正在编写一个C#库供本机C ++应用程序使用。 我使用C ++ / CLI作为互操作性机制。 我需要将回调函数从C ++传递给C#(使用C ++ / CLI作为中间层)。 C#库需要使用零终止的宽字符串来调用C ++函数; 即回调函数的原型是 Func(LPCWSTR pszString); 还有其他参数,但它们对于这个讨论并不重要。 我搜索网,发现Marshal.GetDelegateForFunctionPointer方法,我可以使用。 这个问题是它将System.String从C#转换为char *而不是我正在寻找的wchar_t *。 此外,如果可能的话,实现此代码示例的最佳方法是什么,包括C ++ / CLI部分。 C ++ / CLI dll依赖于C#dll。 方法需要同步调用。