C#调用C++DLL,传入struct [问题点数:37分,结帖人HYH553879809]

HYH
Bbs3
本版专家分:758
结帖率 98.37%
Bbs6
本版专家分:8993
Blank
黄花 2017年4月 .NET技术大版内专家分月排行榜第二
Bbs6
本版专家分:8993
Blank
黄花 2017年4月 .NET技术大版内专家分月排行榜第二
Bbs9
本版专家分:52172
Blank
黄花 2016年4月 .NET技术大版内专家分月排行榜第二
2016年2月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2017年3月 .NET技术大版内专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第三
2016年9月 .NET技术大版内专家分月排行榜第三
2016年8月 .NET技术大版内专家分月排行榜第三
2016年7月 .NET技术大版内专家分月排行榜第三
2016年3月 .NET技术大版内专家分月排行榜第三
2016年1月 .NET技术大版内专家分月排行榜第三
2015年12月 .NET技术大版内专家分月排行榜第三
2015年11月 .NET技术大版内专家分月排行榜第三
HYH
Bbs3
本版专家分:758
Bbs9
本版专家分:52172
Blank
黄花 2016年4月 .NET技术大版内专家分月排行榜第二
2016年2月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2017年3月 .NET技术大版内专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第三
2016年9月 .NET技术大版内专家分月排行榜第三
2016年8月 .NET技术大版内专家分月排行榜第三
2016年7月 .NET技术大版内专家分月排行榜第三
2016年3月 .NET技术大版内专家分月排行榜第三
2016年1月 .NET技术大版内专家分月排行榜第三
2015年12月 .NET技术大版内专家分月排行榜第三
2015年11月 .NET技术大版内专家分月排行榜第三
Bbs7
本版专家分:18072
HYH
Bbs3
本版专家分:758
Bbs9
本版专家分:52172
Blank
黄花 2016年4月 .NET技术大版内专家分月排行榜第二
2016年2月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2017年3月 .NET技术大版内专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第三
2016年9月 .NET技术大版内专家分月排行榜第三
2016年8月 .NET技术大版内专家分月排行榜第三
2016年7月 .NET技术大版内专家分月排行榜第三
2016年3月 .NET技术大版内专家分月排行榜第三
2016年1月 .NET技术大版内专家分月排行榜第三
2015年12月 .NET技术大版内专家分月排行榜第三
2015年11月 .NET技术大版内专家分月排行榜第三
HYH
Bbs3
本版专家分:758
Bbs9
本版专家分:52172
Blank
黄花 2016年4月 .NET技术大版内专家分月排行榜第二
2016年2月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2017年3月 .NET技术大版内专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第三
2016年9月 .NET技术大版内专家分月排行榜第三
2016年8月 .NET技术大版内专家分月排行榜第三
2016年7月 .NET技术大版内专家分月排行榜第三
2016年3月 .NET技术大版内专家分月排行榜第三
2016年1月 .NET技术大版内专家分月排行榜第三
2015年12月 .NET技术大版内专家分月排行榜第三
2015年11月 .NET技术大版内专家分月排行榜第三
HYH
Bbs3
本版专家分:758
Bbs9
本版专家分:52172
Blank
黄花 2016年4月 .NET技术大版内专家分月排行榜第二
2016年2月 .NET技术大版内专家分月排行榜第二
Blank
蓝花 2017年3月 .NET技术大版内专家分月排行榜第三
2017年2月 .NET技术大版内专家分月排行榜第三
2016年9月 .NET技术大版内专家分月排行榜第三
2016年8月 .NET技术大版内专家分月排行榜第三
2016年7月 .NET技术大版内专家分月排行榜第三
2016年3月 .NET技术大版内专家分月排行榜第三
2016年1月 .NET技术大版内专家分月排行榜第三
2015年12月 .NET技术大版内专家分月排行榜第三
2015年11月 .NET技术大版内专家分月排行榜第三
Bbs4
本版专家分:1515
Bbs6
本版专家分:8993
Blank
黄花 2017年4月 .NET技术大版内专家分月排行榜第二
HYH
Bbs3
本版专家分:758
【C#】调用C语言生成的dll
C#<em>调用</em>C语言生成的<em>dll</em> using System; using System.Runtime.InteropServices; //与导入<em>dll</em>有关的命名空间 using System.Windows.Forms; class Example { //[导入<em>dll</em>,<em>dll</em>与exe在同一个文件夹下]导入<em>dll</em>中getCpuID1函数 [DllImport("CPUID32DLL.<em>dll</em>...
c# 调用c动态dll
[b][color=#FF0000]请问下面<em>调用</em>正确吗?rn为什么我的程序<em>调用</em>后还是出现SSL初始化错误rnSSLLib.<em>dll</em>rn放在了bin下[/color][/b]rnrn[code=C#]rnint OPENSSL_init(intmode)rnrnrn[/code]rnrnrnrnrn[code=C#][DllImport("SSLLib.<em>dll</em>",CallingConvention=CallingConvention.Cdecl,EntryPoint="OPENSSL_init")]]rnpublic static extern int OPENSSL_init(int mode);rnrnrnrn函数<em>调用</em>rnpublic void test()rnrn //为什么这里初始化会出错?rn int i= OPENSSL_init(0);rnrnrn[/code]rnrnrnrn[color=#FF0000]1楼 bdmh回复:是什么<em>调用</em>约定啊,stdcall还是cdecl,c默认是cdeclrnrnrnrn 答: 是 Cdecl.. 急死我了。 应该本地可以<em>调用</em>阿 为什么会这样 。 1点多就要测试了。rnrnrn2楼 evilant回复:SSL初始化错误,是不是找不到SSLib.<em>dll</em>?rnrnrn 答:rn SSLLib.<em>dll</em>放在程序bin->DeBug下了!rnrn3楼 guliang21 回复 :放到system32下试试rnrn 答:放了 。还是一样rnrn4楼 lizhibin11 大侠:回复:CallingConvention=CallingConvention.Cdecl把这个去掉rn 答: 去掉还是一样rnrn5楼 isjoe回复:是web项目吗?rn 答: winfrom[/color]rnrnrnrn
求救: c#调用 c的dll
<em>c#</em><em>调用</em> c的<em>dll</em>rn有两个传出参数 char* password,char* corp_idrnrn<em>dll</em>内部定义rnunsigned long user_num;rn.....rnsprintf(corp_id,"%06ld",user_num);rnrnunsigned char cur_word,chk_word,pwd_word[17] = ""rn.....rnsprintf(password,"%s",pwd_word);rnrnrn我在<em>c#</em>中用StringBuilder,password得不到值,corp_id得出的值是正确的,是什么原因啊???rn
C#调用c的dll问题
函数原型:int WINAPI rf_anticoll(unsigned short icdev, rn unsigned char bcnt,rn unsigned char *pSnr,rn unsigned char *pLen)rn参数:icdev:[IN] 通讯设备标识符rn bcnt: [IN] 取值4rn pSnr: [OUT]返回的卡序列号rn pLen: [OUT]返回序列号的长度rn返回:成功返回0rn我在<em>c#</em>中应如何定义入口参数?rnpublic static extern int rf_anticoll(int dev, byte bcnt, out string pSnr, out int len)rn这个不行。报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
C#调用C代码DLL
首先我们新建一个C语言的WIN32项目 选择项目类型为DLL库 在新建的项目中我们添加Ccode.h,Ccode.cpp两个文件 Code.h extern &quot;C&quot; __declspec(<em>dll</em>export) int Minus(int a, int b); extern &quot;C&quot; __declspec(<em>dll</em>export) int Add(int a, int b); Cc...
C#调用C Dll的问题
在C#中<em>调用</em>C写的Dll,rn函数原型为 void GetPic(char * szCode, BYTE * pPicture)rnrn用C#建个窗口应用程序rnrn [DllImport("PictureGenerator.<em>dll</em>", EntryPoint = "GetPic")]rn static extern void GetPic(string szCode, byte[] pPicture);rnrnrn private void Form1_Load(object sender, EventArgs e)rn rn rn Byte[] pPic = new Byte[9000];rn GetPic("test", pPic);rn rnrn这样是可以<em>调用</em>的。rnrn但是,同样的代码,放在WEB中就不行了。在运行到GetPic时就会出错。说是 rnNullReferenceException: 未将对象引用设置到对象的实例rn这是为什么啊,窗口程序的与WEB有什么不同么。
C#调用C写的dll
我的步骤是这样的,大家帮忙看看。rn1。把c写的<em>dll</em>拷贝到<em>c#</em>工程的bin的debug下面。rn2。c的头文件如下rnextern "C" rnAMI_UTIL_API long AMI_UTIL_API_CALL getPropertyName(const char* propertyName1, char* propertyName2, int propertyNameLength);rnrn所以,在<em>c#</em>的代码里面,如下rn[DllImport("AmiUtil.<em>dll</em>", EntryPoint = "getPropertyName", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]rnprivate static extern long getPropertyName(string propertyName1, string propertyName2, int propertyNameLength);rn3。<em>调用</em>的时候,我写成如下rnstring str1, str2;rnnPropertyNameLength = 0;rngetPropertyName(str1, str2, nPropertyNameLength))rnrnrn正确的步骤和写法应该是怎么样的?
c#初学,调用c的dll
c的头文件rnextern "C" void _export _stdcall get_one_yc(int fac, int yc_dot, float *yc_value);rnrn<em>c#</em><em>调用</em>我这样写rn public class DllTestrn rn [DllImport("BaseDll.<em>dll</em>")]rn private extern static void get_one_yc(int fac, int yc_dot, float *yc_value);rn rnrn提示“指针和和固定大小缓冲区只能在不安全的上下文中使用”,我这样写对吗,要怎么改,之后要如何用这个函数,帮忙写写吧,多谢了
C#调用C DLL文件
这是我<em>调用</em>的 [DllImport("Zhuzhan.<em>dll</em>", EntryPoint = "IdentityAuthentication", CharSet = CharSet.Ansi)]rn static extern int IdentityAuthentication(string Div,byte[] RandAndEndata);rn他原始提供的是IdentityAuthentication(char* Div,char* RandAndEndata);rn 不过经常报错rnrn运行时遇到了错误。此错误的地址为 0x62ed646b,在线程 0xf9c 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。rnrn
C#调用C DLL异常
最近在开发过程中需要使用C#<em>调用</em>C写的DLL,但在<em>调用</em>过程中遇到这个问题:“尝试读取或写入受保护的内存 这通常指示其它内存已损坏”,出现错误的地方可能为C#定义的结构体与C定义的结构体转换错误。详细如下:rn1.引用外部C的DLL:rn[code=csharp][DllImport(@"C:\Users\Administrator\Documents\visual studio 2010\Projects\CSQLDLL\Debug\CSQLDLL.<em>dll</em>", EntryPoint = "CDBWriteFunc")]rn public static extern int CDBWriteFunc(ref DB_INFO_CTL_TBL dbinfo, [In, Out] USR_INFO_TBL []usrinfo,int count);[/code]rn2.C#中结构体定义:rn[code=csharp][StructLayout(LayoutKind.Sequential)]rn public <em>struct</em> DB_INFO_CTL_TBLrn rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string byDBName; // DB Namern [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string byUsrName; // DB User Namern [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string byIPAddr; // IPrn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string byDBPwd; // Passwordrn ;rn [StructLayout(LayoutKind.Sequential)]rn public <em>struct</em> USR_INFO_TBLrn rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string byName;rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string byAge; rn ;[/code]rn3.C中的函数声明:rn[code=c]__declspec(<em>dll</em>export) INT __stdcall CDBWriteFunc( DB_INFO_CTL_TBL *dbinfo, USR_INFO_TBL *usrinfotbl,INT count );[/code]rn4.C中的结构体定义:rn[code=c]typedef <em>struct</em>rnrn BYTE byDBName[20]; // DB Namern BYTE byUsrName[20]; // DB User Namern BYTE byIPAddr[20]; // IPrn BYTE byDBPwd[20]; // PasswordrnDB_INFO_CTL_TBL;rnrntypedef <em>struct</em>rnrn BYTE byName[20]; rn BYTE byAge[20];rnUSR_INFO_TBL;[/code]rnrn抛出“尝试读取或写入受保护的内存 这通常指示其它内存已损坏”的异常,请问大师们这为毛???
c#怎么调用C的DLL?
有以下疑惑:rn1、c++的<em>dll</em>和c的<em>dll</em>有什么区别?rn2、<em>c#</em><em>调用</em>c的<em>dll</em>的时候有什么不同?rnrn有人说,<em>c#</em><em>调用</em>c的<em>dll</em>还要中间加一层c++的封装?rnrn另,我用vc6写以下的代码,有什么错?rnrn[code=C/C++]rn//<em>dll</em>.cpprn#include "Dll.h " rnint add(int a,int b) rn rnreturn a+b; rn rnint subtract(int a,int b) rn rnreturn a-b; rn rnrn[/code]rn[code=C/C++]rn//<em>dll</em>.hrnextern "C " _declspec(<em>dll</em>import) int add(int a,int b); rnextern "C " _declspec(<em>dll</em>import) int subtract(int a,int b); rn[/code]
C# 调用 C 写的DLL
'int __stdcall GetBasicInfo(HANDLE icdev,unsigned long &CardSN); rnPrivate Declare Function GetBasicInfo Lib "CMCC.<em>dll</em>" (ByVal icdev,ByRef CardSN&) As Longrn rn上面是 VB 6.0 中<em>调用</em> C DLL的代码 rn------------------------------------------------------------------------------------ rn那么 C# 遇到 &CardSN 该怎么写呢,请教,不胜感激 rn
C#调用c++Dll,struct中套struct的问题
我利用C#<em>调用</em>c++<em>dll</em>,<em>调用</em>的数据结构如下所示:rn [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]rn public <em>struct</em> tagMemberInforn rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string customerID; // 会员号rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string name; // 姓名,不得为空rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string password; // 密码,不超过12位,不得为空rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string pwdBeSure; // 确认密码,需与密码核实rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]rn public string idCard; // 身份证,不得为空,15位或18位,需详细校验,15位需转成18位rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string birthDay; // 出生日期,需与身份证核实,可以为空rn [MarshalAs(UnmanagedType.I1)]rn public bool gender; // 性别,男TRUE,女FALSErn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 500)]rn public string address; // 地址,可以为空,不超过255位rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string postcode; // 邮编,可以为空,或者必须为6位rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string telephone; // 联系电话,可以为空,10到15位rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string email; // 邮箱,可以为空,或者必须包含'@','@'之后至少有一个'.'rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]rn public string registerTime; // 注册时间,无需判断rn [MarshalAs(UnmanagedType.R8)]rn public double credit; // 积分rn ;rnrn [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]rn public <em>struct</em> tagInfoQueryRet rn rn [MarshalAs(UnmanagedType.I1)]rn public bool SuccessOrNot;rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]rn public string errmsg;rn public tagMemberInfo memInfo;rn ;rnrn我在第二个结构里嵌套了第一个tagMemberInfo,不知道这样行不?反正我试着发现,返回字符都不对的,应该是哪个地方除了问题才对。
请教 C# 调用 DLL 遇到 需要传入 struct 中有 char[] 应该如何处理
使用 C# <em>调用</em> DLL 时, 遇到一个method 需要<em>传入</em> <em>struct</em> rn但<em>struct</em> 中有 char a[10] 应该如何处理?rn[code=C/C++]rntypedef <em>struct</em> tagBlowfishObjectrnrn unsigned char seed[CRYPT_LENGTH];//10rn int table_index; /* init: 0 */rn int stream_pos; /* init: 0 */rn int block_pos; /* init: 0 */rnBlowfishObj;rn[/code]rn[code=C#]rnpublic <em>struct</em> BlowfishObjrn rn public char[] seed;//这里char[]、string、StringBuidler、unsafe char*、byte[] 都试过了,都不行rn public int table_index; /* init: 0 */rn public int stream_pos; /* init: 0 */rn public int block_pos; /* init: 0 */rn rn[/code]
c# 调用c dll 出错,显示找不到c dll
新学<em>c#</em>,建了个工程,由于要操作硬件,自己用vs2005做了个c 的<em>dll</em>,工程编译没有问题,但下到WINCE5.0的设备上去之后,程序无法运行,弹了个无法找到<em>dll</em>的错误框。我c 的<em>dll</em>是按照标准流程建立的。请各位帮我看看问题出在哪里?谢谢rnrnc 代码:rn[img=https://img-bbs.csdn.net/upload/201402/24/1393214823_621984.png][/img]rnrn<em>c#</em> 代码:rn[img=https://img-bbs.csdn.net/upload/201402/24/1393214867_65796.png][/img]rn<em>c#</em> 引用代码:rn[img=https://img-bbs.csdn.net/upload/201402/24/1393214924_153910.png][/img]rn
C# 调用C++ Dll 参数 void* 怎么转换struct
千辛万苦,经过坛子里的高手指点,用unsafe的写法<em>c#</em>的代码终于能得到c++ <em>dll</em>里传过来的值了(尽管debug的时候还是会有错误,但好歹现在有数据了),现在有个问题<em>dll</em>里有参数是void*,根据类型转换成不同的结构,比如提供的c++客户端例子是这样写的:rn [code=c]rn RecvDataHandler(const TMsgHead *pAppHead, const void *pData)rn switch(pMsgHead->sDataType)rn rn case 1://pData转成单一结构TStuct1 rn TStuct1 *p1= (TStuct1 *)pData;rn sprintf(p1.data);rn ....rn rn case 2://pData转成结构数组TStuct2rn THead *pHead = (THead *)pAppHead;rn TStuct2 *p2 = (TStuct2 *)pData;rn for(i = 0; i < pHead ->nItems; i++)rn rn //rn sprintf(p2[i].nStatus);rn ......rn rn rnrnrn[/code]rn我<em>c#</em>这样写rn[code=csharp]rn unsafe void RecvDataHandler(ref TMsgHead pAppHead, IntPtr pData)rn rn switch (pMsgHead.sDataType)rn rn 1:rn TStuct1 d1 = new TStuct1 ();rn d1 = (TStuct1)Marshal.PtrToStructure(pData, typeof(TStuct1));rn logger.Info(d1.data);//能正常得到data值rn rn 2:rn TStuct2 d = new TStuct2[pMsgHead.nItems];rn //这句一直报错rn d = (TStuct2[])Marshal.PtrToStructure(pData, typeof(TStuct2[]));rn rn rn[/code]
C#调用VC的DLL。需要传入一个字符指针,怎么办,谢谢。
C#<em>调用</em>VC的DLL。需要<em>传入</em>一个字符指针,怎么办,谢谢。rn还有,C#的字符是不是有2个BYTE长啊,我调试的时候发现自己定义的一个字符指针里面的连续两个字符地址不是连续的。是不是这么回事啊?
C#调用OpenCV实现的dll,如何实现数据类型转换和传入图像
如题,利用OpenCV实现几个函数,现在想在C#(WPF)下来进行<em>调用</em>:rn想问下,1:如何进行数据类型的转换rn比如下面的函数rn[code=c]void ColorToGray2(IplImage *pIn, IplImage *pOut, int width, int height, int DibWidth, short channels)rnrn //IplImage* src = cvLoadImage(pIn);rn //IplImage* dst = cvCreateImage(cvSize(src->width,src->height),8,3);rn cvCvtColor(pIn,pOut,CV_RGB2GRAY);rn width=pIn->width;rn height=pIn->height;rn DibWidth=pIn->widthStep;rn channels=pIn->nChannels;rn[/code]rnC#中的接口形式:[code=csharp]C#:void ResizeImage(byte[] pIn, byte[] pOut, int width, int height, int DibWidth, short nChannel, double fScale)[/code]rn自己也查了一些资料,有的说可以byte[]->uchar *->IplImage,希望大家能帮忙解答下,到底如何转换,有小例子就更好了!rnrn2、利用C#读入的图像如何<em>传入</em>到DLL中rn因为最后的界面用WPF来设计,如何将Image<em>传入</em>到<em>dll</em>中?
c# 调用c语言写的dll,参数为char[] c#传入的参数应该如何定义?
要是看不懂我再详细描述~~rn问题解决另送100分~~rn非常感谢~~~
C#调用带结构体指针的C Dll的方法
在C#中<em>调用</em>C(C++)类的DLL的时候,有时候C的接口函数包含很多参数,而且有的时候这些参数有可能是个结构体,而且有可能是结构体指针,那么在C#到底该如何安全的<em>调用</em>这样的DLL接口函数呢?本文将详细介绍如何<em>调用</em>各种参数的方法。 一、<em>调用</em>接口仅含普通变量 int fnAdd(int num1,int num2); 那么在C#<em>调用</em>这种函数最简单了,直接用函数原型即可,如下: [Dll...
再问,C#调用外部C的dll
原来地址:http://community.csdn.net/Expert/TopicView.asp?id=5738054rnrn问题出在:猜测应该是结构体的传值问题。rn<em>struct</em> char[]在<em>c#</em>定义成char[] byte[]都说无法封送,长度不对。rn我把<em>struct</em>里的char []换成string,没错误了。但是out返回出的结果是错误的。rn根据以往的帖子我把out换成ref。同样没有返回值。rnrn急救。rn困惑了两三天了。rn谢谢。rn
关于C#调用C写的Dll的问题
C API声明如下:rnint WINAPI SMGPSendSingle( rn int nNeedReport,rn int nMsgLevel,rn const char* sServiceID,rn int nMsgFormat,rn const char* sFeeType,rn const char* sFeeCode,rn const char* sFixedFee, rn const char* sValidTime,rn const char* sAtTime,rn const char* sSrcTermID,rn const char* sChargeTermID,rn const char* sDestTermID,rn int nMsgLen,rn const char* sMsgContent,rn char* sMsgID,rn int* pnErrorCode,rn char* pMsgType = NULL,rn char* pReserved = NULL,rn const int* pTP_pid = NULL,rn const int* pTP_udhi = NULL,rn const char* pLinkID = NULL,rn const char* pMsgSrc = NULL,rn const int* pChargeUserType = NULL,rn const int* pChargeTermType = NULL,rn const char* pChargeTermPseudo =NULL,rn const int* pDestTermType = NULL,rn const char* pDestTermPseudo = NULL,rn const int* pPkTotal = NULL,rn const int* PkNumber = NULL,rn const int* pSubmitMsgType = NULL,rn const int* pSPDealResult = NULL, rn const char* pMServiceID = NULLrn );rnrn我用C#写的<em>调用</em>代码如下:rn[DllImport("SmgpDll.<em>dll</em>", EntryPoint = "SMGPSendSingle")]rn private static extern int SMGPSendSingle( rn int nNeedReport,int nMsgLevel,string sServiceID,int nMsgFormat,string sFeeType,string sFeeCode, //[7]rn string sFixedFee,string sValidTime,string sAtTime,string sSrcTermID,string sChargeTermID, //[22]rn string sDestTermID,int nMsgLen,string sMsgContent,rn [Out]StringBuilder sMsgID, ref int pnErrorCode, StringBuilder pMsgType, StringBuilder pReserved, ref int pTP_pid,rn ref int pTP_udhi, string pLinkID, string pMsgSrc, ref int pChargeUserType,rn ref int pChargeTermType, string pChargeTermPseudo, ref int pDestTermType, string pDestTermPseudo,rn ref int pPkTotal, ref int PkNumber, ref int pSubmitMsgType, ref int pSPDealResult, string pMServiceID);rnrn每次<em>调用</em>就报"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"rn请高手解答
c#调用C DLL报错,救助!
[code=c]// 下列 ifdef 块是创建使从 DLL 导出更简单的rn// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DYNAMICPWDCREATOR_EXPORTSrn// 符号编译的。在使用此 DLL 的rn// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将rn// DYNAMICPWDCREATOR_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的rn// 符号视为是被导出的。rn#ifdef DYNAMICPWDCREATOR_EXPORTSrn#define DYNAMICPWDCREATOR_API __declspec(<em>dll</em>export)rn#elsern#define DYNAMICPWDCREATOR_API __declspec(<em>dll</em>import)rn#endifrnrnDYNAMICPWDCREATOR_API bool CheckPwd(char* szPwd);rnDYNAMICPWDCREATOR_API char* GetPwd();rn[/code]rnrn我做的C#代码rnrn[code=csharp] [DllImport("DynamicPwdCreator.<em>dll</em>")]rn public extern static string GetPwd();rn public Form1()rn rn InitializeComponent();rn rnrn private void button1_Click(object sender, EventArgs e)rn rn label1.Text = GetPwd();rn rn[/code]rnrn运行时出现rn尝试读取或写入受保护的内存。这通常指示其他内存已损坏rnrn不知道哪里有问题,请指点
C#调用C/C++ dll问题
C/C++ DLL里的函数定义:rnextern "C" __declspec(<em>dll</em>export) int __stdcall pfs_login (char request[], char response[],int bufSize, char address[]);rnresponse是输出参数,其他的全部是输入参数rnrn在<em>c#</em>里怎么<em>调用</em>这个<em>dll</em>,不知道怎么写。谢谢。
C# 调用 C/C++ DLL的问题!
方法都能成功<em>调用</em>,但是回调函数都不能<em>调用</em>,我用的委托。
会C#调用C dll的进
C语言函数声明为:rnbool bSendMsg(HANDLE hComm,char *szMsg,char *szPhNbr,char *szSCA,int iSMSFormat,char *szNextMsg,char *szErrInfo);rnrn入口参数:hComm 串口句柄,szMsg 待发的短信内容,szSCA 短信中心号码,iSMSFormat 短信编码格式rn出口参数:szNextMsg 超长部分的待发内容, sErrInfo 出错信息rnrn其中szSCA是结构体rn<em>struct</em> STRUCommInfornrn int iBaudRate;rn char szSCA[30];rn;rn我的<em>c#</em>声明为rnrn [DllImport("SMSCom.<em>dll</em>", EntryPoint = "bSendMsg")]rn public static extern bool bSendMsg(IntPtr hComm,string szMsg,string szPhNbr,string szSCA,int iSMSFormat, StringBuilder szNextMsg, StringBuilder szErrInfo);rn rnrnrn结构体为:rn[StructLayout(LayoutKind.Sequential)]rn public <em>struct</em> STRUCommInforn rn public int iBaudRate;rn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 30)] rn public string szSCA;rn rnrn<em>调用</em>方法:rnrn其中stru.szSCA通过上个函数<em>调用</em>,已返回 “8613800555500”rnCallDll.bSendMsg(ptr, "在干嘛呢", "15215553319", stru.szSCA, 0, sd, sc);rn然后报:尝试读取或写入受保护的内存错误,期待高手看下我的代码参数是否传错了rnrn
C#调用C的dll的CString的问题
拿到的<em>dll</em>是C++写的,里面有CString的数据类型,用C#该怎么用呢?高手指正一下。
c# 调用c dll 无法找到入口
代码如下: C++ 接口如下:rn DWORD dwKeyIndex; //输送系统分配的索引rn DWORD bandRate=0; // 暂时没用 rn DWORD rv; // 返回值 成功 USBKEY_SUCCESS 失败 USBKEY_KEY_REMOVEDrn KEYHANDLE hKey; //输出句柄rn Usb_Connect(dwKeyIndex,bandRate,&hKey)rnrnC# <em>调用</em> 该接口:rnusing using System.Runtime.InteropServices;rn.....rnrn[ DllImport(@"C:\ZfCryptApi.<em>dll</em>", EntryPoint = "Usb_Connect")]rn rn public static extern UInt32 Usb_Connect(UInt32 dwKeyIndex,UInt32 bandRate, ref IntPtr hkey); rn private void button1_Click(object sender, EventArgs e)rn rn UInt32 dwindex = Convert.ToUInt32(textBox1.Text);rn IntPtr hkey = IntPtr.Zero;rn UInt32 rv=Usb_Connect(dwindex, 0,ref hkey);rn label1.Text = rv.ToString();rn rn运行结果:无法在 DLL“C:\ZfCryptApi.<em>dll</em>”中找到名为“Usb_Connect”的入口点。我的<em>调用</em>是否正确,望大侠指教。rn
如何将C# 结构体地址传入C类型的dll函数?
我现在要<em>调用</em>一个 C型 <em>dll</em> 里的函数, 其中一个参数是 void * 型的,我Import它的时候用 IntPtr 替换之。rn现在需要把一个 C# <em>struct</em>,--tagConnect 的地址传给该函数。rn请问怎么搞啊?rnref tagConnect 试过不行的。rnC# <em>struct</em>的地址是否可以转化为句柄赋给 IntPtr 呢?rn望高手指点。。。谢谢!
C#调用C/C++的dll须知
1. C#类型与C/C++类型的对应关系 基本数据类型(C# C/C++) System.Int32,int int, long System.Int64,int64 long long, __int64 System.Char, char char, byte, unsigned char System.Int16, short
c# 调用c/c++ dll 参数问题
该文章纯属笔记,遇到一个问题,就在纪录到这里,方便以后的查询。 1:我们有时候想得到c/c++ 参数的返回值。(2016-10-13)              C/C++函数原型:                    MotionControl(char *command,char *confirm,char *message);             此处我们想获取mess
C#调用C的dll 请高手指点
//test<em>dll</em>.<em>dll</em>rnrn//这是<em>dll</em>的声明rn<em>struct</em> Player rnrn char name[256];rn long age;rn;rnEXPORT bool CALLBACK GetPlayerInfo(TCHAR *pPath, Player *pPlayers, int *pCount, char *pGameName);rnrn//这是用C来<em>调用</em>rn#include rn#include "test<em>dll</em>.h"rn#pragma comment(lib, "test<em>dll</em>.lib")rnint main()rnrn Player player[12];rn int count = 0;rn char gameName[256] = 0 ;rn GetPlayerInfo(TEXT("c:\\a"), player, &count, gameName);rn return 0;rnrnrn//请问怎样在C#中<em>调用</em>?
c#调用c写dll出问题
本人想将hhed.c(8000多行)做成<em>dll</em>后在<em>c#</em>中<em>调用</em>.<em>dll</em>做好了,在<em>c#</em>中<em>调用</em>后,运行时出现下列问题rn1.我是在<em>dll</em>的def文件只有export一个hhed_main(将原来的main函数改掉了的),hhed_main中<em>调用</em>hhed.c中的其它子函数,那些子函数也需要在def文件中也要进行export声明么?rnhhed.c中的hhed_main首行已经改为rn__declspec(<em>dll</em>export) int __stdcall hhed_main(int argc, char *argv[])rnrn2.<em>c#</em>中的<em>dll</em>import如下rn[DllImport("HHEdDLL.<em>dll</em>", EntryPoint = "hhed_main", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]rn public static extern int hhed_main(Int16 argc, [MarshalAs(UnmanagedType.LPTStr)]string word);rnrn其中string word对应的是hhed_main中的char *argv[]参数.运行的时候出现问题为Attempted to read or write protected memory. This is often an indication that other memory is corrupt.我将string word改成其它类型还是出现同样的问题,去掉[MarshalAs(UnmanagedType.LPTStr)]后还是出现同样的问题,怎么样匹配c中的char *argv[]呢?出现attepmpted......那个错误的原因是什么呢?请高手指教,谢谢!
c中能否调用c#写的dll?
如题
C# 调用C/C++ dll 问题
C/C++ rn DWORD _stdcall GetSerialNumrn(rn IN HANDLE hCard, rn OUT BYTE bSerial[NUMLEN] rn);rnrn我写的:rn [DllImport("HS.<em>dll</em>", EntryPoint = "GetSerialNum")]rn public static extern uint GetSerialNum([In]uint handl, [MarshalAs(UnmanagedType.LPArray)] byte[] data);rnrn<em>调用</em>方法:rn byte[] array= new byte[255];rn Common.GetSerialNum(KeyHandle, array);rnrn返回来的array 我用Encoding.Default.GetString(array)转换,拿到的是乱码rn
C# 调用C语言DLL问题
我用C# <em>调用</em>C语言DLL问题rnrnC 给出的例子是:rnEXPORT long _stdcall addCon(int iType ,char *szPar,int iID);rnrn而我C#这么写的:rnpublic static extern long addCon(int iType, string szPar, int iID)rnrn<em>调用</em>出的问题:rn未能从程序集“Couns_Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“Couns_Test.Form1”,因为方法“addCon”没有实现(没有 RVA)。rnrn请问各位,这个问题是怎么解决。rn
C#调用C程序dll的内存问题
项目需要:实现C#<em>调用</em>C语言写的的算法,该C程序需要封装成<em>dll</em>。C程序本身可以跑通没有任何问题,随即写了一个C#demo来<em>调用</em>该算法。报如下图的错误rn[img=https://img-bbs.csdn.net/upload/201801/02/1514857716_481818.png][/img]rn由于测试阶段,所以该C程序没有参数接口,所以排除网上一些帖子说的参数类型不匹配的原因。rn进入<em>dll</em>内部进行调试,报如下错误rn[img=https://img-bbs.csdn.net/upload/201801/02/1514857382_79391.png][/img]rn经调试发现是第二块内存continental_47_grid分配失败导致的上图错误,第一块aodgrid分配正常。rn[img=https://img-bbs.csdn.net/upload/201801/02/1514857404_960180.png][/img]rn但如果手动把分配内存大小调小可以分配成功。如此看来是内存空间不够的问题导致的,但重点是C程序本身运行没有出现过这样的问题。难道是<em>dll</em>本事有内存限制机制?rn卡了很多天了,还望各路大神帮忙看看rn以下是C#<em>调用</em>代码:rnpublic static class NativeMethodrnrn[DllImport("kernel32.<em>dll</em>", EntryPoint = "LoadLibrary")]rnpublic static extern int LoadLibrary(rn[MarshalAs(UnmanagedType.LPStr)] string lpLibFileName);rn [DllImport("kernel32.<em>dll</em>", EntryPoint = "GetProcAddress")]rn public static extern IntPtr GetProcAddress(int hModule,rn [MarshalAs(UnmanagedType.LPStr)] string lpProcName);rnrn [DllImport("kernel32.<em>dll</em>", EntryPoint = "FreeLibrary")]rn public static extern bool FreeLibrary(int hModule);rnrn static int Main(string[] args)rn rn int hModule = NativeMethod.LoadLibrary("AHI_AOD_noarg.<em>dll</em>");rn if (hModule == 0)rn return 1;rn IntPtr intPtr = NativeMethod.GetProcAddress(hModule, "AHI");rn AHI AHI = (AHI)Marshal.GetDelegateForFunctionPointer(intPtr, typeof(AHI)); rn AHI();rn return 0;rn rnrnrn
C#调用C的dll文件问题
现在我有个C写的c.<em>dll</em>文件,想在C#里<em>调用</em>,有一个函数是传给结构体的,不知道在C#中怎么写这函数。rn这个函数是:rnint initialize(CCallbackInterface *CCallbackInterface)rn参数名 类型 描述rnCCallbackInterface CCallbackInterface* 回调函数指针结构体rnrn我在c.h里看到CCallbackInterface这结构是:rnrn<em>struct</em> _CALLBACKINTERFACErn void (*onGetCapabilityToken)(); rn void (*onConnected)(); rn void (*onConnectError)(int reason); rn...rn;rntypedef <em>struct</em> _CALLBACKINTERFACE CCallbackInterface;rnrn现在我在C#中这样用rnpublic <em>struct</em> _CALLBACKINTERFACErn void onGetCapabilityToken(); rn void onConnected(); rn void onConnectError(int reason); rn ...rn rnrn[DllImport("c.<em>dll</em>", EntryPoint = "initialize")] //初始化rn public static extern int initialize(_CALLBACKINTERFACE CCallbackInterface); rnrn我不知道对不对,因为我不知道在窗口cs中<em>调用</em>这个initialize的时候_CALLBACKINTERFACE这个要怎么传,知道的指教下,谢谢
C#中调用C生成的Dll 问题
C#中<em>调用</em>C生成的Dll,总报程序发生异常错误..不懂为什么..rnC的代码:rnint Sum(int a,int b)rnrn return a+b;rnrnC#中<em>调用</em>的代码:rn class Dllrn rn [DllImport("EssDll.<em>dll</em>",EntryPoint="Sum",rn CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]rn public static extern int Sum(int a,int b);rnrn /// rn /// 应用程序的主入口点。rn /// rn [STAThread]rn static void Main(string[] args)rn rn Console.Write("Dll测试开始\n");rn Console.Write(Sum(5,6).ToString());rn Console.Write("\n前面<em>调用</em>Dll完成!\n");rn string ok = Console.ReadLine();rn rn rnrnC生成Dll是用Cywin来生成的,命令如下:rnEssDll:rn gcc -g -c ./src/EssDll.c -I./include -L./librn <em>dll</em>wrap -o EssDll.<em>dll</em> EssDll.o --def ./src/EssDll.defrn mv ./EssDll.o ./obj/rn mv ./EssDll.<em>dll</em> ./bin/rnrn*.def文件如下:rnLIBRARY EssDllrnEXPORTS rn Sum
C#调用C语言DLL文件示范
C#<em>调用</em>C语言DLL文件示范 C#<em>调用</em>C语言DLL文件示范 C#<em>调用</em>C语言DLL文件示范
C# 调用C dll文件,无法加载问题
如图在VS中直接引用添加时出现错误。需要直接将<em>dll</em>添加到项目生成的exe同一个文件夹下,或者在Import时采样绝对路径或相对路径方式。
C# 调用C/C++ DLL库的回调函数
1、在 C/C++端 定义一个函数指针 Typedef void (*TESTBACK)(int a, int b); 定义一个带函数指针的函数 __declspec(<em>dll</em>export int add(TESTBACK ptsTestBack, int a, int b) { return ptsTestBack(a, b); } 2、C# 端 声明回调函数的委
如何用C#调用C写的dll???
各位大侠 我现在自己封装了一个C的<em>dll</em>,然后用C#<em>调用</em>它,但是C#里面没有“头文件”这东西,这该怎么<em>调用</em>呢?rnrn[code=C/C++][/code]rn// The cJSON <em>struct</em>ure:rntypedef <em>struct</em> cJSON rn <em>struct</em> cJSON *next,*prev; rn <em>struct</em> cJSON *child; rn int type; // The type of the item, as above.rnrn char *valuestring; // The item's string, if type==cJSON_Stringrn int valueint; // The item's number, if type==cJSON_Numberrn double valuedouble; // The item's number, if type==cJSON_Numberrnrn char *string; // The item's name string, if this item is the child of, or is in the list of subitems of an object.rn cJSON;rnrntypedef <em>struct</em> cJSON_Hooks rn void *(*malloc_fn)(size_t sz);rn void (*free_fn)(void *ptr);rn cJSON_Hooks;rnrn// Supply malloc, realloc and free functions to cJSONrn__declspec(<em>dll</em>export) void cJSON_InitHooks(cJSON_Hooks* hooks);rnrnrnrn[code=C#][/code]rnrnnamespace DeviceApplication1rnrn public partial class Form1 : Formrn rn public Form1()rn rn InitializeComponent();rn rnrn [DllImport("cJson.<em>dll</em>")]rn public static extern void cJSON_InitHooks(cJSON_Hooks* hooks);rn rnrnrncJSON_Hooks和cJSON 是.h里面定义的结构体,但是在C#里面不认这个结构体,是不是C#里面要重写这个结构体呢? 如果是重写的话cJSON_Hooks这个结构体中的函数指针和返回类型是指针的函数指针该怎么写呢?rnrn希望知道的大哥多帮帮忙,先谢了。
C#如何调用C语言实现的dll
在网上搜索到了一个des加密的c语言实现,rn.h文件:rn[code=C/C++]rn/* d3des.h -rn *rn * Headers and defines for d3des.crn * Graven Imagery, 1992.rn *rn * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridgern * (GEnie : OUTER; CIS : [71755,204])rn */rnrn#define D2_DES /* include double-length support */rn#define D3_DES /* include triple-length support */rnrn#ifdef D3_DESrn#ifndef D2_DESrn#define D2_DES /* D2_DES is needed for D3_DES */rn#endifrn#endifrnrn#define DES_EN0 0 /* MODE == encrypt */rn#define DES_DE1 1 /* MODE == decrypt */rnrn/* A useful alias on 68000-ish machines, but NOT USED HERE. */rnrntypedef union rn unsigned long blok[2];rn unsigned short word[4];rn unsigned char byte[8];rn M68K;rnrnextern void deskey(unsigned char *, short);rn/* hexkey[8] MODErn * Sets the internal key register according to the hexadecimalrn * key contained in the 8 bytes of hexkey, according to the DES,rn * for encryption or decryption according to MODE.rn */rnrnextern void usekey(unsigned long *);rn/* cookedkey[32]rn * Loads the internal key register with the data in cookedkey.rn */rnrnextern void cpkey(unsigned long *);rn/* cookedkey[32]rn * Copies the contents of the internal key register into the storagern * located at &cookedkey[0].rn */rnrnextern void des(unsigned char *, unsigned char *);rn/* from[8] to[8]rn * Encrypts/Decrypts (according to the key currently loaded in thern * internal key register) one block of eight bytes at address 'from'rn * into the block at address 'to'. They can be the same.rn */rnrn#ifdef D2_DESrnrn#define desDkey(a,b) des2key((a),(b))rnextern void des2key(unsigned char *, short);rn/* hexkey[16] MODErn * Sets the internal key registerS according to the hexadecimalrn * keyS contained in the 16 bytes of hexkey, according to the DES,rn * for DOUBLE encryption or decryption according to MODE.rn * NOTE: this clobbers all three key registers!rn */rnrnextern void Ddes(unsigned char *, unsigned char *);rn/* from[8] to[8]rn * Encrypts/Decrypts (according to the keyS currently loaded in thern * internal key registerS) one block of eight bytes at address 'from'rn * into the block at address 'to'. They can be the same.rn */rnrnextern void D2des(unsigned char *, unsigned char *);rn/* from[16] to[16]rn * Encrypts/Decrypts (according to the keyS currently loaded in thern * internal key registerS) one block of SIXTEEN bytes at address 'from'rn * into the block at address 'to'. They can be the same.rn */rnrnextern void makekey(char *, unsigned char *);rn/* *password, single-length key[8]rn * With a double-length default key, this routine hashes a NULL-terminatedrn * string into an eight-byte random-looking key, suitable for use with thern * deskey() routine.rn */rnrn#define makeDkey(a,b) make2key((a),(b))rnextern void make2key(char *, unsigned char *);rn/* *password, double-length key[16]rn * With a double-length default key, this routine hashes a NULL-terminatedrn * string into a sixteen-byte random-looking key, suitable for use with thern * des2key() routine.rn */rnrn#ifndef D3_DES /* D2_DES only */rnrn#define useDkey(a) use2key((a))rn#define cpDkey(a) cp2key((a))rnrnextern void use2key(unsigned long *);rn/* cookedkey[64]rn * Loads the internal key registerS with the data in cookedkey.rn * NOTE: this clobbers all three key registers!rn */rnrnextern void cp2key(unsigned long *);rn/* cookedkey[64]rn * Copies the contents of the internal key registerS into the storagern * located at &cookedkey[0].rn */rnrn#else /* D3_DES too */rnrn#define useDkey(a) use3key((a))rn#define cpDkey(a) cp3key((a))rnrnextern void des3key(unsigned char *, short);rn/* hexkey[24] MODErn * Sets the internal key registerS according to the hexadecimalrn * keyS contained in the 24 bytes of hexkey, according to the DES,rn * for DOUBLE encryption or decryption according to MODE.rn */rnrnextern void use3key(unsigned long *);rn/* cookedkey[96]rn * Loads the 3 internal key registerS with the data in cookedkey.rn */rnrnextern void cp3key(unsigned long *);rn/* cookedkey[96]rn * Copies the contents of the 3 internal key registerS into the storagern * located at &cookedkey[0].rn */rnrnextern void make3key(char *, unsigned char *);rn/* *password, triple-length key[24]rn * With a triple-length default key, this routine hashes a NULL-terminatedrn * string into a twenty-four-byte random-looking key, suitable for use withrn * the des3key() routine.rn */rnrn#endif /* D3_DES */rn#endif /* D2_DES */rnrn/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imageryrn ********************************************************************/rn[/code]
关于C#调用c的dll是的问题
#define IMAGE_WIDTH (352)rn#define IMAGE_HEIGHT (288)rn uint8_t frameData[65536];rn uint8_t imageRGB[IMAGE_WIDTH* IMAGE_HEIGHT*3];rnrn void* g_dec_handler = h264_dec_init();rn if(!g_dec_handler) return FALSE;rn//开始解码rnwhile(1)。。。。。。。。。。。。。。。。。。rnrn我现在的改写的C#代码是static void Main(string[] args)rn rn const int IMAGE_WIDTH =352;rn const int IMAGE_HEIGHT=288;rn byte [] frameData;rn frameData =new byte [65536];rn byte[] imageRGB;rn imageRGB = new byte[IMAGE_WIDTH * IMAGE_HEIGHT * 3];rn下面就有问题了。。不知怎么写了。。。求大侠解释。在线等。rn
C#调用C dll出现的问题
C <em>dll</em> 代码中的输出函数1rnextern "C" __declspec(<em>dll</em>export) int ConnectServer(char cUser[64],rn char cPass[64],char cIp[32],char cNEName[64]);rnrnC#对应的函数形式我写成如下:rnpublic static extern int ConnectServer(byte[] cUser, byte[] cPass, byte[] cIp, byte[] cNEName);rn rn这样使用:rn byte[] user = new byte[64];rn byte[] password = new byte[64];rn byte[] ip = new byte[32];rn byte[] NEName = new byte[64];rn ConnectServer(user, password, ip, NEName);rnrn最后报错,报错内容:外部组件发生异常,难道是我的参数类型有问题?rnrnrnrnrnC <em>dll</em> 代码中的输出函数2rnextern "C" __declspec(<em>dll</em>export) void disConnectServer();rnC#对应的函数形式rnpublic static extern void disConnectServer();rn这个连参数也没有,<em>调用</em>后报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。rnrnrn请问大概是什么原因,是我的C <em>dll</em>有问题,还是C#的使用方法有问题,谢谢!
C#调用C封装dll结构体指针
原来一直用MFC做,最近项目要用C#学了学基本的东西还是有差距啊,<em>调用</em>底层函数的时候卡主了,求路过大神帮忙rn先是C++的定义:rntypedef <em>struct</em> TagData_<em>struct</em>rn double value; //返回点的数值rn long time; //返回点的时间,秒rn int status; //返回点的状态rnTagData;rnrn初始化:rnchar *tagNames[MEM_PAGE_ITEMS];rnfor ( int i=0; i
C#调用C语言的dll问题
在C#里面<em>调用</em>一个用C语言写的<em>dll</em>,如果是用C去<em>调用</em>是这样的:rnchar str[256];rnstrcpy(str,"`hello!");rna = (long)str; rn在C#里面不能直接这么用,我把C代码封装成unsafe段,还是解决不了。rnunsafernrnchar str[256];rnstrcpy(str,"`hello!");rna = (long)str;rnrn不知道是用的不对还是这个方法压根行不通。请高手指点,在线等待。谢谢。rn
c#调用c中的dll函数
在c、c++中有typedef定义。当要把c/c++中的程序移植到<em>c#</em>或<em>调用</em>c中的<em>dll</em>函数时,涉及到一些数据结构的重新定义。为了方便,可使用<em>c#</em>中的using 别名;对于指针,需加unsafe 如: using boolean_T = System.Byte; unsafe public <em>struct</em> emxArray_real_T { double* data; int* size; int ...
c#如何调用c/c++的dll
[color=#FF0000]我已经知道<em>调用</em>的语法,但我想知道以下两点:[/color]rn1:这些非托管DLL是不是要实现什么接口,或者遵循某些协议,才能被C#<em>调用</em>?rn2:是否能<em>调用</em>C语言写的DLL?或者说是否只能<em>调用</em>C++写的,不能<em>调用</em>C写的?
C#中调用c生成dll问题
如有xx.<em>dll</em>,rn在c代码中,rn函数为:rninter* add (inter * a , inter *b);rn其中inter为结构体。rn用<em>c#</em><em>调用</em>rnclase interrn[StructLayout(LayoutKind.Sequential)]rnrn...rnrn[DllImport("xx.<em>dll</em>")]rnrn public extern static (返回值) add ((返回值), (返回值));rnrn该函数返回值应该怎么写,参数应该怎么写。因为c代码中定义的该函数返回值和参数都是指针。rn
C#调用C动态DLL问题
我的系统为2003,用C写的DLL类库,C#的窗体去<em>调用</em>,没有问题。rn同样的项目,拿到XP系统下,<em>调用</em>就出现异常。rn这是部分错误信息.rnrn 有关<em>调用</em>实时(JIT)调试而不是此对话框的详细信息,rn请参见此消息的结尾。rnrn************** 异常文本 **************rnSystem.Runtime.InteropServices.COMException (0x8007007A): 传递给系统<em>调用</em>的数据区域太小。 (异常来自 HRESULT:0x8007007A)rnrn
C# 调用 C 、C++ 编写的dll
用c++编写了一个<em>dll</em>,现在要供c#<em>调用</em>,rnrn在c++中<em>调用</em>的格式为:rnrntypedef void (*CALLBACKF) (char **, int, double, char **);rnrntypedef bool (*FUN)(char *, double , double , double , CALLBACKF, int);rnrn<em>dll</em>=LoadLibrary(<em>dll</em>Location); rnFUN fun1=(FUN)GetProcAddress(<em>dll</em>, "fun");rnrn在<em>c#</em>中如何实现?有没有相关资料?rnrn谢谢~
c#调用c编写的dll问题,char*
最近在弄一个rfid读卡的测试模块。需要<em>调用</em>c/c++编写的<em>dll</em>。但是一直弄不对,请大侠帮忙rnrn<em>dll</em>函数原型rn函数声明 int WINAPI mifs_request_2(uchar _Mode, uchar *_TagType)rn功能描述 寻卡rn入口参数 _ Mode:模式 0x26 rn出口参数 TagType:卡类型rn返 回 值 0—成功,﹥0—失败rnrnrn<em>c#</em>的代码rn函数定义rn [DllImport("MifsDLL.<em>dll</em>", CharSet = CharSet.Ansi)]rn private static extern int mifs_request_2(rn byte bMode,rn StringBuilder strbCardTypern );rn函数<em>调用</em>rn int iRet;rn StringBuilder strbCardType = new StringBuilder(255);rn iRet = -1;rn for (int i = 0; i < PublicVar.iGL_RetryTimes; i++)rn rn iRet = mifs_request_2(0x26, strbCardType);rn MessageBox.Show(strbCardType.ToString());rn if(iRet == 0)rn break;rn rnshow出来的是乱码,不知道为什么
请问C#调用C的DLL函数
函数如下rnextern "C" _declspec(<em>dll</em>export) char* __stdcall myfunction(const char* keyfile,const char* in_str, int* out_len);rnrn我在C#工程里添加rn using System.Runtime.InteropServices;rn[DllImport("my<em>dll</em>.<em>dll</em>",CharSet=CharSet.Ansi, CallingConvention=CallingConvention.StdCall)]rnrn IntPtr len=new IntPtr(10);rn System.String ret=DecPn("test1", "test2", len);rnrnrn编译报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏rnrn
求助C语言的DLL在C#里面调用
经过了多方查找,我终于搞到了系统提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏 ”rn说明我传的参数不对,求达人帮我从C转化成C#的<em>调用</em>语句,下面贴出rnunsigned WINAPI TACkey_Command(int iHandle,int iCommLen,unsigned char* ucComm,int* iRespLen,unsigned char* ucResp)rn这是给我的C中<em>调用</em>的语句,下面是我自己写的rniRet = TACkey_Command(out iHandle, out iCommLen, Comm, ref iRespLen, Resp);rn其中,comm和Resp我用的是StringBuilder,但是仍然报错,求指点
C#调用C/C++ DLL函数问题。
C/C++函数原型为:rnLMUSB_HANDLE __stdcall InitializeDevice(unsigned short usVID,rn unsigned short usPID,rn LPGUID lpGUID,rn BOOL *pbDriverInstalled);rnLMUSB_HANDLE 定义为 typedef void *LMUSB_HANDLE;rnLPGUID 定义为 typedef GUID *LPGUID;rnGUID 定义为 typedef <em>struct</em> _GUID rn unsigned long Data1;rn unsigned short Data2;rn unsigned short Data3;rn unsigned char Data4[ 8 ];rn GUID;rnrnrnC#中重新声明函数为rn[DllImport("LMUSBDLL_TEST.<em>dll</em>")]rnpublic static extern Byte[] InitializeDevice(UInt16 usVID, UInt16 usPID, ref GUID lpGUID,rn ref bool pbDriverInstalled);rnpublic <em>struct</em> GUIDrnrn private UInt32 Data1;rn private UInt16 Data2;rn private UInt16 Data3;rn [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]rn private Byte[] Data4;rnrn public GUID(UInt32 DT1, UInt16 DT2, UInt16 DT3, Byte []DA4)rn rn this.Data1 = DT1;rn this.Data2 = DT2;rn this.Data3 = DT3;rn this.Data4 = DA4;rn rnrnrn<em>调用</em>如下:rnstatic Byte[] DA4_INITIAL = 0xB7, 0x72, 0xb3, 0xAF, 0x2B, 0x6F, 0xDE, 0x1C ;rnstatic GUID GUID_DEVINTERFACE_STELLARIS_BULK = new GUID(0x6E45736A, 0x2B1B, 0x4078, DA4_INITIAL);rnrnByte []hUSB;rnbool bDriverInstalled = false;rnhUSB = InitializeDevice(IT300_BULK_VID, IT300_BULK_PID, ref GUID_DEVINTERFACE_STELLARIS_BULK, ref bDriverInstalled);rn编译成功,运行出错如下:rnrn未经处理的异常: System.Runtime.InteropServices.MarshalDirectiveException: 无法rn封送处理“return value”: 无效的托管/非托管类型组合。rn 在 ConsoleApplication_CsharpReUseCppDll_Test.Program.InitializeDevice(UInt16rnusVID, UInt16 usPID, GUID& lpGUID, Boolean& pbDriverInstalled)rn 在 ConsoleApplication_CsharpReUseCppDll_Test.Program.Main(String[] args) 位置rn E:\IT-300-DXWindowsApplicationRegisted-N1\ConsoleApplication_CsharpReUseCppDll_rnTest\Program.cs:行号 165rn请按任意键继续. . .rnrnrnInitializeDevice定义如下:rnrnextern "C" __declspec(<em>dll</em>export) LMUSB_HANDLE PASCAL EXPORTrnInitializeDevice(unsigned short usVID,rn unsigned short usPID,rn LPGUID lpGUID,rn BOOL *pbDriverInstalled)rnrnrn return(InitializeDeviceByIndex(usVID, usPID, lpGUID, 0, true,rn pbDriverInstalled));rnrnrnrnrnextern "C" __declspec(<em>dll</em>export) LMUSB_HANDLE PASCAL EXPORTrnInitializeDeviceByIndex(unsigned short usVID,rn unsigned short usPID,rn LPGUID lpGUID,rn DWORD dwIndex,rn BOOL bOpenDataEndpoints,rn BOOL *pbDriverInstalled)rnrnrn BOOL bResult;rn WINUSB_INTERFACE_HANDLE usbHandle;rn USB_INTERFACE_DESCRIPTOR ifaceDescriptor;rn WINUSB_PIPE_INFORMATION pipeInfo;rn UCHAR speed;rn ULONG length;rn DWORD dwError;rn int i;rn tDeviceInfoWinUSB *psDevInfo;rnrn if(!lpGUID || !pbDriverInstalled)rn rn return(NULL);rn rn psDevInfo = (tDeviceInfoWinUSB *)LocalAlloc(LPTR, sizeof(tDeviceInfoWinUSB));rn if(!psDevInfo)rn rn return(NULL);rn rn psDevInfo->deviceHandle = OpenDeviceByIndex(dwIndex, lpGUID);rn if(psDevInfo->deviceHandle == INVALID_HANDLE_VALUE)rn rn dwError = GetLastError();rn *pbDriverInstalled = (dwError == ERROR_DEV_NOT_EXIST) ? FALSE : TRUE;rn LocalFree((HLOCAL)psDevInfo);rn return(NULL);rn rnrn bResult = WinUsb_Initialize(psDevInfo->deviceHandle, &usbHandle);rn if(bResult)rn rn psDevInfo->winUSBHandle = usbHandle;rn length = sizeof(UCHAR);rn bResult = WinUsb_QueryDeviceInformation(psDevInfo->winUSBHandle,rn DEVICE_SPEED,rn &length,rn &speed);rn rnrn if(bOpenDataEndpoints)rn rnrn if(bResult)rn rn psDevInfo->deviceSpeed = speed;rn bResult = WinUsb_QueryInterfaceSettings(psDevInfo->winUSBHandle,rn 0,rn &ifaceDescriptor);rn rnrn if(bResult)rn rn for(i=0;iwinUSBHandle, 0, (UCHAR) i,rn &pipeInfo);rnrn if((pipeInfo.PipeType == UsbdPipeTypeBulk) &&rn USB_ENDPOINT_DIRECTION_IN(pipeInfo.PipeId))rn rn psDevInfo->bulkInPipe = pipeInfo.PipeId;rn rn else if((pipeInfo.PipeType == UsbdPipeTypeBulk) &&rn USB_ENDPOINT_DIRECTION_OUT(pipeInfo.PipeId))rn rn psDevInfo->bulkOutPipe = pipeInfo.PipeId;rn rn elsern rn SetLastError(ERROR_NOT_SAME_DEVICE);rn bResult = FALSE;rn break;rn rn rn rnrn if(bResult)rn rn psDevInfo->hReadEvent = CreateEvent(NULL, TRUE, FALSE, NULL);rnrn if(psDevInfo->hReadEvent)rn rn bResult = true;rn rn rn rn elsern rn psDevInfo->bulkOutPipe = 0;rn psDevInfo->bulkInPipe = 0;rn psDevInfo->hReadEvent = NULL;rn rnrn if(bResult)rn rn return((LMUSB_HANDLE)psDevInfo);rn rn elsern rn LocalFree((HLOCAL)psDevInfo);rn return(NULL);rn rnrnrn求教各路大虾,如何解决“无法封送处理“return value”: 无效的托管/非托管类型组合。”的问题?
C# 调用c的dll,char*指针的问题
要做一个读卡器的程序,厂商提供的C的<em>dll</em>,其中有个函数用到CHAR*,请各位大侠指导。rn函数说明如下:rn2.3.2 读卡片非认证区信息,即2-7BLOCK的信息 iReadPlantDatarnint iReadPlantData(int handle,int offset,int datalen,char * dataBuf)rn功能:读卡片非认证区信息rn输入:int handle读写器句柄rn int offset:偏移量,为4的倍数,从0-20之间取值rn int dataLen:写入数据的长度,为4的倍数,从4-24之间取值rn[b]输出:char * dataBuf:需要更新的数据,为16进制格式。[/b]rn返回:0,非认证区信息读出正确。rn 非0,错误。rnrnrn我是这样写的(略去无关代码)rn public unsafe class Cardrn rn [DllImport("pumchric.<em>dll</em>", CharSet = CharSet.Auto)]rn public static extern int iReadPlantData(int handle,int offset,int datalen,char * dataBuf);rn rnrn private void button1_Click(object sender, EventArgs e)rn rn char dataBuf; rn i = Card.iReadPlantData(50, 0, 24, &dataBuf);rn textBox2.Text = Convert.ToString(dataBuf);rn rn[b]char * dataBuf这个位置应该保存着一个字符串。[/b]现在程序可以运行,但读出来的是一个乱码(可能是只读了第一个字符??),CHAR*在C#中如何使用?如何改?
C#调用C/C++写的dll
C++ 代码: 头文件: extern &quot;C&quot; _declspec(<em>dll</em>export)bool openWindow(char*classname,char*name); 或 EXTERN_C _declspec(<em>dll</em>export)bool openWindow(char*classname,char*name); 或 extern &quot;C&quot;{ _declspec(d...
C#调用C/C++ DLL方式总结
C#与C/C++ DLL交互方式总结 C#<em>调用</em>C/C++ DLL导出 C/C++的导出函数: int __stdcall AFunc(wchar_t* str) { //ugsdifgoisuhfgiosugdtfuywegouy return 0; } C#声明: [DllImport(&amp;amp;quot;xxxx.<em>dll</em>&amp;amp;quot;, CharSet = CharSet.Unicode, C...
C#调用C写的DLL的相关问题...
我现在手头上有3份DLL,和对应的.LIB,.H文件...(开源的项目,非盗用)rnrn问题是这样的,如果直接用C#来<em>调用</em>DLL的话,需要重写大量的结构体(好象是要吧)...rnrn某位高人提示我说用COM重新把DLL封装,提供给C#使用...rnrn但是我对COM不熟悉,能不能提供相关的范例,或者意见呢?rnrn这几份<em>dll</em>来自ffmpeg(http://www.chinavideo.org/index.php?option=com_remository&Itemid=0&func=download&id=68&chk=50e2111e68e2a02aca4fbb54540ab8b4)的SDK版本...rnrn有人可以帮忙做个范例吗?rnrn我使用的是VS 2005...
C#怎样调用c编写的dll
C#怎样<em>调用</em>c编写的<em>dll</em>,<em>dll</em>中函数为 extern "C" void PASCAL EXPORT relation(int len,double *ch1,double *ch2,double *data);rnch1 ch2 data 都是数组rn那么在<em>c#</em>中该写怎样一个函数?rn各位高手快帮忙啊rn
c#调用C语言写的DLL
请问大家rn利用 C#<em>调用</em>C#语言写的DLLrn如何处理设计到结构指针的问题rn网上一直找不到比较完整的教程rn大家推荐下哈
C 中的DLL C#中如何调用
C :rnrnint PubStrToIso ( char * pcSourceStr, int nStrLen, ISODataStru * TargetIsoStru, int *pnPosition) rnrnC#:rn结构定义:rnrn private delegate int FIELD_PACKAGER_PACK (ISO_FIELD_DEF pthis, byte pfieldbuf, short fieldlen, byte poutdata);rn private delegate int FIELD_PACKAGER_UNPACK(ISO_FIELD_DEF pthis, byte pfieldbuf, short fieldlen, byte poutdata);rn [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]rn <em>struct</em> ISO_FIELD_DEFrn rn short len; /* 数据域最大长度 */rn LENGTH_TYPE lentype; /* 数据域长度类型: 1--LLVAR型 2--LLLVAR型 */rn ALIGN_TYPE align; /* 对齐类型 */rn char padchar; /* 补齐字符 */rn FIELD_PACKAGER_PACK pack; /* 打包函数指针 */rn FIELD_PACKAGER_UNPACK unpack; /* 解包函数指针 */rn ; rn [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]rn <em>struct</em> ISO_FIELDrn rn short len;rn short off; /* 指向iso->databuf缓冲区的偏移,数据中不含长度类型的几个字节 */rn ; rn [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]rn public <em>struct</em> ISODataStrurn rn [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2560)]rn ISO_FIELD []fld;rn char []bitmap; rn [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_MSG_LEN+MAX_MSG_LEN)]rn byte []databuf; /* 多留一个域的长度,防止溢出 */rn short used;rn ;rnrnrn如何定义、使用 以上函数? ( PubStrToIso ) ?rn万分感谢!rnrnrnrn
关于C# 调用C语言 DLL 的问题 !
我现在有一个DLL需要我用C#将其引用。 函数原型是是这样的!rnrnvoid __stdcall QSCalc1(double f1,double f2,double f4,rnint m,rndouble *F, double *tg, double *th,rndouble *tg0, double *th0,rndouble *tn0, double tw0, double Fz,rndouble Qz,rndouble *q,double *s);rnrnrn我现在写了一个方法。 <em>调用</em>的时候没有问题,但是在返回的时候 总是报错! rn引发类型为“System.ExecutionEngineException”的异常。rnrnQSCalc1(f1,f2,f4,m,ref F,ref tg, ref th,ref tg0,ref th0,ref tn0,Convert.ToDouble(tw0),Fz,Qz,ref q,ref s);rnrn编译正常通过,但是在进行<em>调用</em>该函数的时候就报上面的错误。 不知道是哪出了问题, 还有,上面引用的方法中, ref q 和ref s 是DLL返回的两个数组。 我想把这两个数组中的数据读出来,应该怎么办呢? (无法更改DLL文件)
c#调用c生成的dll文件的问题
C#<em>调用</em>c生成的<em>dll</em>文件,其中的函数的返回类型为void* 型,如void *fun(ushort a)rn请问在<em>c#</em>中应如何<em>调用</em>?
求救,C# 调用C编写的dll问题
C原型:rntypedef enum _SUPPORT_LAYERrn rn HDLC = 0x01,rn TCPIP,rn UDPIPrn SUPPORT_LAYER;rn rn typedef union _ADDRrnrn <em>struct</em>rn rn unsigned int ServerLowerAddr : 14; //服务器低地址rn unsigned int ServerUpperAddr : 14; //服务器高地址rn unsigned int res : 4;rn unsigned char ClientAddr;rn unsigned char ServerAddrLen;rn HDLC_ADDR1;rnrn <em>struct</em>rn rn unsigned int ServerAddr : 28;rn unsigned int res : 4;rn unsigned char ClientAddr;rn unsigned char ServerAddrLen;rn HDLC_ADDR2;rnrn <em>struct</em>rn rn unsigned int Client_TCP_Port;rn unsigned int Server_TCP_Port;rn unsigned char Client_IP_Addr[4];rn unsigned char Server_IP_Addr[4];rn TCPIP_ADDR;rnrn <em>struct</em>rn rn unsigned int Client_wPort;rn unsigned int Server_wPort;rn unsigned int Client_UDP_Port;rn unsigned int Server_UDP_Port;rn unsigned char Client_IP_Addr[4];rn unsigned char Server_IP_Addr[4];rn UDPIP_ADDR; rnADDR;rnrn int ProcessServicePrimitive(unsigned char **OUTData, unsigned int &OUTDataLen,SUPPORT_LAYER SupportLayerType, ADDR Addr,const unsigned char *Xml, unsigned int XmlLen);rn请问如何用C#<em>调用</em>ProcessServicePrimitive参数?
C#的调用C的dll问题,急!
在C中使用的结构体是:rntypedef <em>struct</em> _Assetarrayrn u_short port;rn char* ip_addr;rn char* service;rn char* application;rn int discovery;rnAssetarray;rnrn我在C#中这样<em>调用</em>不行rn[ StructLayout( LayoutKind.Sequential ) ]rn public <em>struct</em> Assetarrayrn rn public ushort port;rn [MarshalAs(UnmanagedType.LPArray)]rn public byte[] ip_addr;rn [MarshalAs(UnmanagedType.LPArray)]rn public byte[] service;rn [MarshalAs(UnmanagedType.LPArray)]rn public byte[] application;rn public int discovery;rn ;rnrn [DllImport("pads.<em>dll</em>", CharSet = CharSet.Auto)]rn public static extern int main_pads(Assetarray[] assetarray1);rn请问各位,上面的Assetarry结构体在C#对应什么? 我<em>调用</em>main_pads,传进参数数组Assetarray,rnAssetarray在函数里面赋值,然后我能在C#中使用assetarray1的数据.rn
关于 c# 调用c动态dll
[b][color=#FF0000]请问下面<em>调用</em>正确吗?rn为什么我的程序<em>调用</em>后还是出现SSL初始化错误rnSSLLib.<em>dll</em>rn放在了bin下rnrn[/color][/b]rnrnrn[code=C/C++]rnint OPENSSL_init(intmode)rn[/code]rnrn[code=C#]rnrnrn[DllImport("SSLLib.<em>dll</em>",CallingConvention=CallingConvention.Cdecl,EntryPoint="OPENSSL_init")]]rnpublic static extern int OPENSSL_init(int mode);rnrnrnrn函数<em>调用</em>rnpublic void test()rnrn //为什么这里初始化会出错?rn int i= OPENSSL_init(0);rnrnrn[/code]
求救C#调用C做的DLL问题!!!
DLL文件名:CV.<em>dll</em>rnDLL中有个函数定义如下:rn extern "C" BOOL _stdcall OutConversion(unsigned char cmdid,Conversion* para);rnrn参数Conversion 是一个结构:rn<em>struct</em> Conversion rn unsigned char CmdIdrn unsigned short MsgNo;rn unsigned char LifeCycle[4];rn UINT TimeOrCount;rn UINT32 Timer[48]; rn UINT32 StartDate; rn UINT32 EndDate;rn rn UINT StayValue; rn unsigned char MoveMode;rn unsigned short ContentLen; rn unsigned char Data[400]; rn rn unsigned char *pcontent;rn unsigned char Time[7]; rn UINT BriData[8];rn;rnrnrn现在要在C#中<em>调用</em>它,我该怎么引用它并定义参数? 请各位大侠多多指教~rnrn
C# 调用c dll 急 求救。。
[code=c]rnLibExport LONG __stdcall ITS_Login(wchar_t *pIp, UINT uPort, wchar_t *pUser, wchar_t *pPassword);rn[/code]rn[code=csharp]rn [DllImport("ITSDll.<em>dll</em>", EntryPoint = "ITS_Login", CharSet = CharSet.Unicode)]rn public static extern Int64 ITS_Login( string ip, UInt32 port, string user, string pwd);rn[/code]rn始终登陆不成功 求救。。 在网上查了wchar_t * 转换成string 或者StringBuilder 都可以啊。始终返回值不是想用的。返回值为0才表示登陆成功 我始终返回个几亿的数字 求救
用C#如何调用C 写的DLL
C 编写的seccli.<em>dll</em>函数如下:rnint SEC_CliSign(char XmlInfo[3800], strlen(XmlInfo), out unsigned char UpSign [180], out nSigLen)rnrnstrlen(XmlInfo)表示XmlInfo长度rnnSigLen 表示UpSign长度.rnrn如何申明、<em>调用</em>!!!!
C#创建DLL和调用DLL
我现在想用C#在A项目中写一个DLL,在B项目中<em>调用</em>,可不知道怎么写和怎么<em>调用</em>rnDLL主要功能是实现主机头的添加rn代码如下:rnDirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/" + siteid);rn PropertyValueCollection serverBindings = site.Properties["ServerBindings"];rn string headerStr = string.Format("0:1:2", ip, port, domain);rn if (!serverBindings.Contains(headerStr))rn rn serverBindings.Add(headerStr);rn rn site.CommitChanges();rnrn现在请问我这个DLL要怎么写才可以在B项目中<em>调用</em>
jni 调用vc dll 字符串传入问题
最近在用jni <em>调用</em>vc的<em>dll</em>接口。rnvc有一个接口是Usb_WriteFile( rn HANDLE hKey, // 目标key的句柄rn LPBYTE FileName, //文件名rn DWORD NameLen, // 文件名长度rn DWORD WdataLen, //要写入数据的长度rn LPBYTE Wdata //写入的数据 unsigned char * 类型rn );rnrn我在java方法里面写的对应的函数rnpublic native static int usb_WriteFile(int hKey,String lpFileName,int lpFileNameLen,int lpWdataLen,String lpWdata);rn相应的把Wdata定义成了String类型,在方法里面把要写入的数据是以字符串的形式写的。rn在我自己写的<em>dll</em>文件中,我是如下做的转换。rnJNIEXPORT jint JNICALL Java_sd_zf_key_Java_1ZfKey_usb_WriteFilern (JNIEnv * env, jclass, jint phKey, jstring lpFileName, jint lpFileNameLen, jint lpWdataLen, jstring lpWdata)rnrn HANDLE hKey=(HANDLE)phKey;rn unsigned char * FileName=(unsigned char *)(env)->GetStringUTFChars(lpFileName,0);rn unsigned char * Wdata=(unsigned char *)(env)->GetStringUTFChars(lpWdata,0);rn DWORD NameLen=(DWORD)lpFileNameLen;rn DWORD WdataLen=(DWORD)lpWdataLen;rn int rv= Usb_WriteFile( rn hKey,rn FileName,rn NameLen,rn WdataLen,rn Wdatarn );rnrnvc的<em>dll</em>还有一个读取文件的接口是rnDWORD Usb_ReadFile ( rnrn HANDLE hKey,rn LPBYTE lpFileName,rn DWORD lpFileNameLen,rn DWORD lpRdataLen, //要读取数据的长度 rn LPBYTE lpRdata, //读取数据的返回值rn LPDWORD lpOutDataLen //数据返回值的长度。在接口被<em>调用</em>后可以自动获取到的一个值。 unsigned long* 类型rnrn);rn<em>调用</em>这个接口可以得到已经写入文件的数据 lpRdata和返回数据的实际长度 lpOutDataLen rn下面是我在自己的<em>dll</em>文件里写的转换rnJNIEXPORT jstring JNICALL Java_sd_zf_key_Java_1ZfKey_usb_ReadFilern (JNIEnv * env, jclass, jint phKey, jstring lpFileName, jint lpFileNameLen, jint lpRdataLen, jstring lpRdata, jint lpOutDataLen)rnrn HANDLE hKey=(HANDLE)phKey;rn DWORD NameLen=(DWORD)lpFileNameLen;rn DWORD RdataLen=(DWORD)lpRdataLen;rn DWORD * OutDataLen=(DWORD *)malloc( sizeof(DWORD));rn unsigned char * FileName=(unsigned char *)(env)->GetStringUTFChars(lpFileName,0);rn unsigned char * Rdata=(unsigned char *)malloc(RdataLen);rn memset(Rdata,0,RdataLen);rn int rv= Usb_ReadFile(rn hKey,rn FileName,rn NameLen,rn RdataLen,rn Rdata,rn (LPDWORD)OutDataLenrn );rnrn unsigned char * Rrdata=(unsigned char *)malloc(* OutDataLen);rn rn if(rv==USBKEY_SUCCESS)rn rn memcpy(Rrdata,(const void *)Rdata,* OutDataLen);rn printf("Usb_ReadFile 成功!\n 读出数据: %s \n 读出数据长度:%d\n",Rrdata,*OutDataLen);rn lpRdata=(env)->NewStringUTF((const char *)Rrdata);rn rn (env)->ReleaseStringUTFChars(lpFileName,(const char *)FileName);rnrnrn我有一些疑问:rn在java里面写入数据时,定义成了String类型。rn1. 我要写入二进制数据时怎么办?rn2. 数据返回值的长度OutDataLen。为什么我得到的这个值总是等于RdataLen(我手动输入的读取文件的长度这个值),而不是等于实际返回的数据的长度。rnrn希望高手能给予指点,小弟不省感激!!!rn
c#开发dll调用dll
详细讲解C#如何开发<em>dll</em>,和<em>调用</em><em>dll</em>
C调用API 调用DLL
NULL 博文链接:https://lyp-0409.iteye.com/blog/1699979
dll中修改c#传入的结构值
c++中rn<em>struct</em> madx_stat rn char msg[256];rn size_t write_size;rn int is_eof;rn size_t readsize;rn size_t remaining;rnrn // Will reference some rn // "middle part" of in_buffer:rn unsigned char *buffstart; rn;rnrnextern "C" __declspec(<em>dll</em>export) madx_sig __stdcall rnmadx_read ( unsigned char *in_buffer, rn unsigned char *out_buffer, madx_house *mxhouse, madx_stat *mxstat)rnrn.........rn//########################################3rn mxstat->readsize =10;rn mxstat->remaining = 10;rn return(MORE_INPUT);rn//###############################3rn.....rnrnrnrnC#中rn[StructLayout(LayoutKind.Sequential, Size = 276), Serializable]rn public <em>struct</em> madx_statrn rnrn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]rn public string msg;rn public uint write_size;rn public int is_eof;rn public uint readsize;rn public uint remaining;rn public IntPtr buffstart;rnrn rnrnrn [DllImport("madx<em>dll</em>wm.<em>dll</em>")]rn public static extern madx_sigrn madx_read(IntPtr in_buffer,rn IntPtr out_buffer, IntPtr mx_house, ref madx_stat mxstat);rnrn<em>调用</em>: mxSignal = Program.madx_read(inBufferPtr, outBufferPtr, mxHousePtr, ref mxStat);rn在vs调试中发现我修改的两个值根本没有变化rn又做测试,在c++中有代码rn if ( (mxstat->readsize == 0) && rn (mxstat->remaining == 0) )rn...rn居然通不过,在调试器中可以看到readsize和remaining的值为0x00000000rnrn我的<em>dll</em>和<em>c#</em>程序都是在vs2008,windows mobile5的sdk中调试的。rn谢谢各位
C调用dll的事例
用C语言编写<em>dll</em>文件的事例,里面详细介绍了如何使用与如何编写一个<em>dll</em>
调用C的Dll的问题
这是<em>dll</em>中的C语言代码rntypedef <em>struct</em>rnrnlong readertype;rnlong cardtype;rnlong port;rnlong baud;rnhandle commdevice;rnlong timeout;rnchar *pin;rnchar *key;rnchar *hostaddr;rnlong hosttimeout;rnchar *cardsn;rnlong optype;rnchar reserved[32];rnicc_env;rnrntypedef <em>struct</em>rnrnunsigned char *pin;rnunsigned char *idcard;rnunsigned char *name;rnunsigned char *sex;rnunsigned char *birth;rnunsigned char *workdate;rnunsigned char *retiredate;rnlong salary;rnlong annuity;rnunsigned char *areacode;rnunsigned char *companyid;rnlong personaltype;rnicc_personal;rnrn这是pb的<em>调用</em>声明rnFUNCTION INT IC_Personal (INT FlagOp, ICC_ENV iccenv, REF ICC_Personal data) Library "iccinter.DLL"rnFUNCTION INT IC_OpenSession (REF ICC_ENV iccenv) Library "iccinter.DLL"rnFUNCTION INT IC_CloseSession (REF ICC_ENV iccenv) Library "iccinter.DLL"rnrndelphi中应该如何声明,<em>调用</em>?
C语言调用DLL
使用c语言<em>调用</em><em>dll</em> 博文地址http://blog.csdn.net/dengnanyi/article/details/8665379
C编写dll调用
C编写<em>dll</em>及<em>调用</em>C编写<em>dll</em>及<em>调用</em>C编写<em>dll</em>及<em>调用</em>
delphi调用c dll
函数格式 RET_TYPE WINAPI paralist_getnode(PARALIST_HANDLE list, int chanNo,PARA_TYPES paraType,rn int *valueLen, char *value)rn功能 从参数列表获取到一个参数。rn参数rnList:参数列表句柄rnchanNo:参数对应的通道号,如果跟通道无关,可以填入任何值;rnparaType:参数类型,请参考 PARA_TYPES 的说明;rnvalueLen:参数值长度指针,获取成功后返回参数值的长度;rnvalue:参数值指针,获取成功后返回参数的值。rn返回值 参见 RET_TYPE 说明。rntypedef enum tagErrorCodernrn rnDM_ERR_OK, rnDM_ERR_PARA, rnDM_ERR_NOAUTH, rnDM_ERR_AUTHFAIL, rnDM_ERR_SOCKET, rnDM_ERR_MEM, rnDM_ERR_TIMEOUT, rnDM_ERR_ARG, rnDM_ERR_MATCH, rnDM_ERR_MAXrnRET_TYPE;rn帮忙写一些注释rnrn
在C环境下调用DLL
请问大家,如何在纯C下<em>调用</em>DLL文件,rn#include rn#pragma comment(lib, "XXX.lib")rn是不是只能用在VC中??
调用C DLL的问题
各位DX好,小弟在用VB<em>调用</em>C写的DLL时,出现问题.rnDLL中的函数是:int WINAPI Open_COMPORT(unsigned char baud1[],int ComNo,int Data)rn我在<em>调用</em>时,这个unsigned char baud1[]该怎么样传值进去呢?
THINK SNS源码下载
很好的SNS源码 全自动安装 非常好用 PHP 相关下载链接:[url=//download.csdn.net/download/ziyan1214/1960110?utm_source=bbsseo]//download.csdn.net/download/ziyan1214/1960110?utm_source=bbsseo[/url]
s7-300/400PLC CPU时钟脉冲应用下载
s7-300/400PLC CPU时钟脉冲应用 相关下载链接:[url=//download.csdn.net/download/yixuehan2012/3177873?utm_source=bbsseo]//download.csdn.net/download/yixuehan2012/3177873?utm_source=bbsseo[/url]
信息技术课件下载
初中信息技术课件资源,自已制作的,共大家参考! 相关下载链接:[url=//download.csdn.net/download/moqianju/4749462?utm_source=bbsseo]//download.csdn.net/download/moqianju/4749462?utm_source=bbsseo[/url]
我们是很有底线的