【从C#设置非托管C dll的公共字段】教程文章相关的互联网学习教程文章

c# – 使用DllImport将非托管dll加载到托管应用程序中【代码】

在我的项目中,我有一个非托管的本机C dll和一个C#应用程序.我试图使用DllImport从非托管DLL导入一个函数,但我一直得到一个DllNotFoundException. 这是我调用DLL的代码.using System.Runtime.InteropServices; namespace TestApp {public delegate void UpdateDelegate(string s);class Program{[DllImport("CGPUnmanagedLibrary.dll")]internal static extern int parse_raw_gsod_file( [MarshalAs(UnmanagedType.LPStr)] ...

从C#调用非托管C库(dll)会产生访问冲突错误(0xc0000005)【代码】

很抱歉这个问题很长.我只是想包括我目前对这个问题所知的一切. 我正在使用Visual Studio 2008在C#中创建一个Windows表单程序,该程序调用用C编写的库.C DLL分析测量数据,该数据由几个样本组成.样本通过函数(PDSetWaveSample)传递给库,该函数将结构作为参数.在设置所有样本之后,使用另一个函数(PDPreProcess)处理测量数据,该函数还将结构作为参数.C DLL将所有测量数据保存在其内部数据结构中,并进行所有处理以获得结果. 在程序开始处...

c# – 非托管资源和Dispose()

我正在阅读一些关于Dispose()方法的文章,发现非托管资源应该从Dispose()方法(或finalize()方法)中显式释放,文章说文件句柄和数据库连接对象是非托管资源的示例.任何人都可以解释为什么那些是不受管理的,如果在Dispose()中没有正确处理会发生什么?我不知道文件句柄是什么.它们存在于哪里?解决方法:在这种情况下,最简单的想法是这样: >非托管资源是通过进行Windows API调用获得的任何资源,该API调用返回必须在某个时刻释放的Windo...

在未导出成员函数时,从C#调用C本机/非托管成员函数【代码】

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

c# – 通过DllImport调用非托管函数时损坏的堆【代码】

我正在使用一个用C#C语言编写的非托管DLL.我有兴趣使用dll中的以下函数:static void StorePath(const std::string& path, wchar_t *out_path,int *out_path_length){wcslcpy(out_path, c_str_w(path), *out_path_length);*out_path_length = path.size();}int WINAPI BrowseForDirectory(int allow_portable, int allow_online,wchar_t *t_directory, int *e_directory_length,wchar_t *m_directory, int *m_directory_length){.....

c# – 导出非托管函数指针时访问冲突【代码】

过去4个小时我一直试图解决一个非常神秘的问题. 我正在为记事本写一些插件.要实现语法高亮,必须导出这样的函数://this function is exported via exports.def file LexerFactoryFunction SCI_METHOD GetLexerFactory(unsigned int index) {return (index == 0) ? RTextLexer::LexerFactory : nullptr; }哪里,LexerFactoryFunction is typedef ILexer *(*LexerFactoryFunction)(); #define SCI_METHOD __stdcall我已经设法让这个东...

c# – 如何从非托管DLL访问包含动态数组的csharp中的结构?【代码】

– 在我的c代码中,我有一个结构,其中包含非托管dll中的许多未知大小的数组(c代码)– 我需要将这个结构的一个实例的数据封送到c#,我稍后会将其发送回非托管的c代码– 一旦到达csharp,我就不需要操作这些数据,只需保持它/存储一段时间(因此它可以保留在字节数组中).– 我不想使用关键字’unsafe’,因为它是一个大项目,这只是一个小块,我不想这样编译. 我尝试将它编组为lpArray并且一切看起来都很好但是当我回到csharp后查看内容时,它...

c# – 调用一个非托管库函数,该函数引用一个指针【代码】

假设我们有一个带有以下原型的C函数:int myFunction(int someNumber, int &arraySize, signed char *&array) // Extra function to free allocated memory: int freePointer(void* myPointer)此函数需要一些数字,并根据该数字创建一个数组.所以我们传递一个数字并得到一个数组.在C#中调用它的最佳方法是什么? 我的第一个方法:[DllImport(...)] internal static int myFunction(int someNumber, out int arraySize, [MarshalAs(U...

c# – 如何取消执行非托管C外部例程的任务【代码】

我正在尝试修复C#异步代码,启动在非托管C例程中编写的外部dll中执行的可取消操作. 有没有办法在创建时使用传递给Task的Cancellation Token取消任务,如果用户委托调用外部非托管C例程? 据我所知,任务取消涉及用户代表与请求取消的代码之间的合作.成功取消涉及请求代码调用CancellationTokenSource.Cancel方法,并且用户委托及时终止操作,方法是在他注意到已经提出取消请求时通过简单地从委托返回(通过轮询CancellationToken.IsCance...

从C#设置非托管C dll的公共字段【代码】

我正在为一个非托管的C dll编写一个C#绑定. 该DLL提供了5个钩子来返回几个数据:typedef void (*t_libpd_printhook)(const char *recv);并导出如下字段:EXTERN t_libpd_printhook libpd_printhook;现在我使用Interop Assistant生成绑定代码,这给了我一个委托定义:public delegate void t_libpd_printhook([In] [MarshalAs(UnmanagedType.LPStr)] string recv);那么我可以使用一些神奇的Interop函数调用来设置DLL中的t_libpd_prin...

c# – 为什么要实现IDisposable来清理非托管资源?【代码】

documentation说You should implement IDisposable only if your type uses unmanaged resources directly. 来自大多数Java背景,这对我来说听起来很奇怪.假设我有一个包含IDisposable成员的类:class Foo : IDisposable {private StreamWriter sw;... }…并假设使用此类,例如,作为一种过滤器,它接受字符串并修改它们,然后使用StreamWriter sw输出它们.我想像一个Writer一样使用这个类. 为什么我不想实现调用sr.Dispose()的Dispose(...

c# – 为什么WPF设计器无法加载调用非托管DLL的库?【代码】

我正在使用Visual Studio 2008,.NET 3.5 SP1,并拥有一个包含以下模块的测试应用程序: >一个C DLL>使用#1的C/C++LI DLL>使用#2的C#WPF应用程序 当我尝试使用#2中的类作为WPF XAML中的资源时,设计师不会让我:<Window x:Class="WpfApplication1.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:lib1="clr-namespace:ClassLibrary1;assembl...

管理与C#的非托管物理引擎

有人试过BEPU Physic Engine吗?http://bepuphysics.codeplex.com/ 它是一个用C#编写的完全托管的物理引擎……我知道它主要用于XNA(XBOX和WP7项目),因为不允许使用非托管代码. 但我想知道的是如何将完全托管的物理引擎与Windows环境中的P / Invoked One(例如tao.ODE)进行比较(在性能方面)? 换句话说,哪个方法在Real Project中围绕非托管引擎(如ODE或PhysX)进行更多开销,完全托管代码或P / Invoke Wrapper?解决方法:我不能评论具体...

c# – 将托管事件源连接到非托管事件接收器【代码】

我正在尝试用C#编写一个托管库,它将充当现有C事件接收器的事件源.我遇到的问题是,当非托管应用程序调用AtlAdvise来获取我的库的连接点映射时,它会收到错误“0x80040200”(CONNECT_E_NOCONNECTION) – 有一些关于该错误的MSDN文章与非托管相关&LT – &GT COM服务器中的非托管通信和无效的连接点映射,但没有关于托管COM服务器的信息. 我已经从非托管的C服务器加载了idl,该服务器工作并获得了公开的事件列表,然后通过执行以下操作在我...

c# – 如何将非托管C表单嵌入到.NET应用程序中?【代码】

我已经能够成功地包装我的非托管Borland C dll,并从C#.NET 4.0应用程序启动它的表单.是否可以将表单从dll直接嵌入到.NET应用程序中? 为了澄清,原始表格已经在Borland C项目中用作嵌入式控件.它本质上看起来像一个自定义控件,坐在应用程序中的面板上. 当我说’嵌入’时,我的意思是将INTO放在一个表单中,就像将按钮,面板等放到表单上一样.我不打算做个孩子. 如果这是不可能的,那么或许更好的问题是如何将无人管理的自定义控件嵌入到...

托管 - 相关标签