我正在尝试使用P / Invoked DeviceIoControl()调用将C#(.NET Compact Framework 3.5)与Windows CE 6 R2流驱动程序接口.对于IOCTL代码之一,驱动程序需要一个DeviceIoControl输入缓冲区,该缓冲区是以下包含嵌入式指针的非托管结构:typedef struct {DWORD address;const void* pBuffer;DWORD size; // buffer size
} IOCTL_TWL_WRITEREGS_IN;我在C#中将结构定义为:[StructLayout(LayoutKind.Sequential)]
public struct IoctlWriteR...
我需要从.NET Web服务(asmx或WCF)调用dll(非托管c).
从Web服务中调用dll很简单,并且可以按预期工作.
但是,当我对Web服务进行负载测试时,就会出现问题. (错误代码0xC0000374-“内部错误,通常涉及堆损坏”).
DLL的所有者通知我,如果同时发送2个或更多调用,则该DLL在多线程环境中不可靠.
在传统的Windows应用程序中,我将通过实现一个singleton类来保护dll来解决此问题.在Web服务实现中是否有推荐的方法来实现这一目标?解决方法:如果只...
我的任务是维护遗留的非托管C系统.我没有访问整个系统的源代码,但是我有许多扩展dll的源代码,当这些扩展dll与核心系统包含在同一目录中时,将被加载而不是内置默认值.
过去,我曾使用扩展程序进行小的更改而没有问题.但是,现在的问题是,我被要求检修具有大量额外功能的扩展dll之一.在C#中创建此额外功能的速度(开发时间)和可维护性将大大提高(我们的团队主要由C#开发人员组成).
扩展dll仅具有两个由核心系统调用的功能.这两个函数采用...
我有一组由C#托管组件和非托管C/C++组件使用的结构定义.现在,相同的结构定义分别存在于C/C++和C#代码中-导致重复和相关的混乱.维护可以在C#和C/C++中使用的单个定义的最佳方法是什么?谢谢!阿米特
附注:我是一名C/C++人士,因此,如果有一种明显的方法可以做到,那么我可能会完全想不到!解决方法:显然,我不熟悉您的项目,但是您是否考虑过在C++/CLI中为您的库构建托管桥?借助“ It Just Works”,C/C++LI编译器可以为您完成黑客攻击...
这是我提出的另一个参考问题:How to call managed C++ methods from Un-managed C++
我已经成功创建了一个C#COM文件.现在,我需要一个简单的解释,说明如何在非托管C中实现它.
我正在关注此示例,但是c部分很薄弱.http://www.codeproject.com/Articles/7859/Building-COM-Objects-in-C
这是我的COM文件using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using System.Text...
我在DLL文件中有一个C函数(它是使用“多字节字符集”选项编译的):_declspec(dllexport) void TestArray(char** OutBuff,int Count,int MaxLength)
{for(int i=0;i<Count;i++){char buff[25];_itoa(i,buff,10);strncpy(OutBuff[i],buff,MaxLength);}
}我想接下来必须是C#原型:[DllImport("StringsScetch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]private static extern void TestArray([Mars...
出于性能原因,我有一个C#前端和一个C后端.现在我想调用一个C函数,例如:void findNeighbors(Point p, std::vector<Point> &neighbors, double maxDist);我想要的是一个C#包装函数,如:List<Point> FindNeigbors(Point p, double maxDist);我可以将像Point []这样的平面数组传递给非托管C dll,但问题是,我不知道要分配多少内存,因为我不知道函数将返回的元素数量…
是否有一种优雅的方式来处理这个没有内存泄漏的麻烦?
谢谢你的帮助...
我想从非托管C传递大约100 – 10,000点到C#.
C面看起来像这样:__declspec(dllexport) void detect_targets( char * , int , /* More arguments */ )
{std::vector<double> id_x_y_z;// Now what's the best way to pass this vector to C#
}现在我的C#端看起来像这样:using System;
using System.Runtime.InteropServices;class HelloCpp
{[DllImport("detector.dll")]public static unsafe extern void detect_targets( stri...
我正在尝试找到类似于http://www.tenstreet.com的解决方案.我试过环顾互联网和sourceforge,但我发现的一切都是关于加密数字签名(我将使用,但不是我缺乏的),而不是图像数字签名.我发现了很多托管解决方案,但由于我们业务的性质,托管解决方案是不可能的(我工作的地方几乎必须在内部完成).
如果这没有意义,我会解释背景.我们是一家货运公司,我们的驱动程序应用程序的一部分是签名发布表.我们目前需要传真该表格以获取签名并等待其传真...
事实上,我有两个未损坏的c库,其中一个使用另一个.两者都很大,所以重写对我来说不是一个选择.
我读了一些关于创建托管c库的东西,它围绕非托管代码.但我不知道如何开始,以及如何在一个项目中结合所有这些东西……
有没有一步一步的指南或如何做到这一点的易于理解的例子?
TIA解决方法:您可以考虑使用ATL为C代码编写COM包装器.我将在blog post中展示如何执行此操作.这就是Microsoft公开他们在C中编写的功能的方式(例如Windows 7库功能...
任何指向工具/实用程序的人都可以将非托管c转换为c#?我已经尝试了http://www.pinvoke.net/网站,但我无法在此question上找到对此API AddUsersToEncryptedFile的引用.解决方法:一般来说这很难,因为C提供的功能与C#不同:模板,朋友,零终止字符串,非托管指针,COM等,更不用说解析C是一个工作的婊子.
要做到这一点,你需要一个具有名称和类型解析的完整C解析器,一组关于如何将每个构造(有问题或无问题)转换为等效C#代码的想法,将这些想法...
我可以从C#代码中实例化和“使用”非托管C类(比如使用DllImport等)吗?解决方法:在Windows上,您可以使用COM interop来使用C.但是,这不适用于Linux / Mac OS X.
另一种方法是在C类周围公开一个C包装器(C中的外部“C”).这是必要的,因为DllImport期望C ABI.
编辑:第三个替代方案是C++/CLI,即编译.Net的C代码.这也是一个仅限Windows的解决方案.
我们有一个很大的C项目,它被编译为本机非托管代码.我们需要使用托管代码中的一个功能,但我们不想在/ clr中编译整个项目.
所以我创建了一个DLL,有一个名为B的ref类,它在导出的本机类A中公开.问题是我得到了一个C1190:由于vcclr.h包含,托管目标代码需要’/ clr’选项.
我想知道是否有办法创建某种在非托管方法中具有托管代码的接口.
这是我的代码:#pragma once
#include "EX_Port.h"
#include <vcclr.h>ref class B;class EX_API A...
在我的项目中,我有一个非托管的本机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)] ...
很抱歉这个问题很长.我只是想包括我目前对这个问题所知的一切.
我正在使用Visual Studio 2008在C#中创建一个Windows表单程序,该程序调用用C编写的库.C DLL分析测量数据,该数据由几个样本组成.样本通过函数(PDSetWaveSample)传递给库,该函数将结构作为参数.在设置所有样本之后,使用另一个函数(PDPreProcess)处理测量数据,该函数还将结构作为参数.C DLL将所有测量数据保存在其内部数据结构中,并进行所有处理以获得结果.
在程序开始处...