C#调用C++DLL相关问题

在控制台应用程序里可以调用成功;但是在ASP.NET网站应用程序里调不成功。望有碰到过类似问题的朋友传授经验,指点迷津。

1个回答

一个是权限限制,然后就是DLL调用的路径等检查一下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#调用C写的DLL的相关问题...
我现在手头上有3份DLL,和对应的.LIB,.H文件...(开源的项目,非盗用)rnrn问题是这样的,如果直接用C#来调用DLL的话,需要重写大量的结构体(好象是要吧)...rnrn某位高人提示我说用COM重新把DLL封装,提供给C#使用...rnrn但是我对COM不熟悉,能不能提供相关的范例,或者意见呢?rnrn这几份dll来自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问题
函数原型: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我在c#中应如何定义入口参数?rnpublic static extern int rf_anticoll(int dev, byte bcnt, out string pSnr, out int len)rn这个不行。报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
C#调用C Dll的问题
在C#中调用C写的Dll,rn函数原型为 void GetPic(char * szCode, BYTE * pPicture)rnrn用C#建个窗口应用程序rnrn [DllImport("PictureGenerator.dll", 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这样是可以调用的。rnrn但是,同样的代码,放在WEB中就不行了。在运行到GetPic时就会出错。说是 rnNullReferenceException: 未将对象引用设置到对象的实例rn这是为什么啊,窗口程序的与WEB有什么不同么。
c#调用C的DLL
c#调用C的DLL
c#调用c的dll
小弟目前遇到一个问题,本人的程序是c#开发的,需要调用别人使用c开发的dll,而这dll里面存在一些汇编代码,在我的程序调用到存在汇编操作的dll函数时,程序报错,“内存不能读取或写入,可能是内存以损坏”。rn请各位高手指点一下,如何解决。
c# 调用 c dll
我在c#中调用 c 写的dll动态链接库,弄了好久,总是报“尝试读入或写入受保护的内存”这样的错误,估计是参数类型对应出错了。大家帮忙看下,下面这个动态库中的c语言函数转换成c#的函数,参数该是怎么样的呢?谢谢rnlong WINAPI OpenComPort(long Port, unsigned char *ComAdr, unsigned char * Baud,long *FrmHandle);
C#中调用c生成dll问题的结构体相关问题
如果我在c中的结构体定义如下rntypedef struct Tcl_Interp rn char *result; rn void (*freeProc)(char *blockPtr); rn int errorLine; rn Tcl_Interp;rnrn其中void (*freeProc)(char *blockPtr)是一个指向函数的指针。rn请问在c#中如何定义该结构体。rn例如:rn public class Tcl_Interprn rn const int RESULT_FULL_LEN = 0x200;rnrn [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RESULT_FULL_LEN)]rn public string result; rn //public IntPtr freeProc (string blockPtr); rn int errorLine; rn
C# 调用C/C++ DLL
[code=c]typedef struct IdcInfo rn char name[30+1]; //rn char sex[1+1]; //'1'男 '2'女 rn char nation[2+1]; //民族 '01'-'57'rn char birth[8+1]; //YYYYMMDDrn char addr[70+1];rn char pid[18+1];rn char issue[30+1]; //发卡机关rn char valid_start[8+1]; //rn char valid_end[8+1]; //rn TIdcInfo;rnrn//读身份证,读取成功后,会在当前目录生成xp.bmp照片文件 // iccdll.dllrnSTDAPI ReadIdcInfo(int ReaderHandle, TIdcInfo *pIdcInfo);rnrn[/code]rnrnrn求C#中该如何调用,谢谢!
C#调用C语言的DLL
C#调用C语言实现的DLL时,出现CoTaskMemFree(IntPtr ptr ) 的错误,查了一下,感觉是参数没有对应上,哪位大侠帮我看看是哪里的问题好吗,跪谢~rnrnC语言被调用代码:rntest.dllrn__declspec(dllexport) char* fun(DWORD mode,const char* password);rnchar* fun( DWORD mode, const char* password);rnrnC#调用侧代码:rn static String code;rn [DllImport("test.dll", CharSet = CharSet.Ansi)]rn public static extern String fun(int mode, String password);rnrn static void Main(string[] args)rn rn String s = "123";rn code = obl_crypto_hash(5, s);rn
C#调用C编写dll
[DllImport("P230_DLL_VC.DLL")]rnpublic static unsafe extern int RpcClose();rnrn调用 int a=RpcClose();rn出错:无法在 DLL P230_DLL_VC.DLL 中找到名为 RpcClose 的入口点。rn请教一下如何解决。rn谢谢!
c#调用c语言Dll
程序实现了C语言生成动态链接库,以及C#的调用方法
c# 调用c动态dll
[b][color=#FF0000]请问下面调用正确吗?rn为什么我的程序调用后还是出现SSL初始化错误rnSSLLib.dllrn放在了bin下[/color][/b]rnrn[code=C#]rnint OPENSSL_init(intmode)rnrnrn[/code]rnrnrnrnrn[code=C#][DllImport("SSLLib.dll",CallingConvention=CallingConvention.Cdecl,EntryPoint="OPENSSL_init")]]rnpublic static extern int OPENSSL_init(int mode);rnrnrnrn函数调用rnpublic void test()rnrn //为什么这里初始化会出错?rn int i= OPENSSL_init(0);rnrnrn[/code]rnrnrnrn[color=#FF0000]1楼 bdmh回复:是什么调用约定啊,stdcall还是cdecl,c默认是cdeclrnrnrnrn 答: 是 Cdecl.. 急死我了。 应该本地可以调用阿 为什么会这样 。 1点多就要测试了。rnrnrn2楼 evilant回复:SSL初始化错误,是不是找不到SSLib.dll?rnrnrn 答:rn SSLLib.dll放在程序bin->DeBug下了!rnrn3楼 guliang21 回复 :放到system32下试试rnrn 答:放了 。还是一样rnrn4楼 lizhibin11 大侠:回复:CallingConvention=CallingConvention.Cdecl把这个去掉rn 答: 去掉还是一样rnrn5楼 isjoe回复:是web项目吗?rn 答: winfrom[/color]rnrnrnrn
【C#】调用C语言生成的dll
C#调用C语言生成的dll using System; using System.Runtime.InteropServices; //与导入dll有关的命名空间 using System.Windows.Forms; class Example { //[导入dll,dll与exe在同一个文件夹下]导入dll中getCpuID1函数 [DllImport("CPUID32DLL.dll...
求救: c#调用 c的dll
c#调用 c的dllrn有两个传出参数 char* password,char* corp_idrnrndll内部定义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我在c#中用StringBuilder,password得不到值,corp_id得出的值是正确的,是什么原因啊???rn
C#调用C代码DLL
首先我们新建一个C语言的WIN32项目 选择项目类型为DLL库 在新建的项目中我们添加Ccode.h,Ccode.cpp两个文件 Code.h extern "C" __declspec(dllexport) int Minus(int a, int b); extern "C" __declspec(dllexport) int Add(int a, int b); Cc...
c#初学,调用c的dll
c的头文件rnextern "C" void _export _stdcall get_one_yc(int fac, int yc_dot, float *yc_value);rnrnc#调用我这样写rn public class DllTestrn rn [DllImport("BaseDll.dll")]rn private extern static void get_one_yc(int fac, int yc_dot, float *yc_value);rn rnrn提示“指针和和固定大小缓冲区只能在不安全的上下文中使用”,我这样写对吗,要怎么改,之后要如何用这个函数,帮忙写写吧,多谢了
C#调用C DLL异常
最近在开发过程中需要使用C#调用C写的DLL,但在调用过程中遇到这个问题:“尝试读取或写入受保护的内存 这通常指示其它内存已损坏”,出现错误的地方可能为C#定义的结构体与C定义的结构体转换错误。详细如下:rn1.引用外部C的DLL:rn[code=csharp][DllImport(@"C:\Users\Administrator\Documents\visual studio 2010\Projects\CSQLDLL\Debug\CSQLDLL.dll", 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 struct 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 struct 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(dllexport) INT __stdcall CDBWriteFunc( DB_INFO_CTL_TBL *dbinfo, USR_INFO_TBL *usrinfotbl,INT count );[/code]rn4.C中的结构体定义:rn[code=c]typedef structrnrn BYTE byDBName[20]; // DB Namern BYTE byUsrName[20]; // DB User Namern BYTE byIPAddr[20]; // IPrn BYTE byDBPwd[20]; // PasswordrnDB_INFO_CTL_TBL;rnrntypedef structrnrn BYTE byName[20]; rn BYTE byAge[20];rnUSR_INFO_TBL;[/code]rnrn抛出“尝试读取或写入受保护的内存 这通常指示其它内存已损坏”的异常,请问大师们这为毛???
C#调用C写的dll
我的步骤是这样的,大家帮忙看看。rn1。把c写的dll拷贝到c#工程的bin的debug下面。rn2。c的头文件如下rnextern "C" rnAMI_UTIL_API long AMI_UTIL_API_CALL getPropertyName(const char* propertyName1, char* propertyName2, int propertyNameLength);rnrn所以,在c#的代码里面,如下rn[DllImport("AmiUtil.dll", EntryPoint = "getPropertyName", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]rnprivate static extern long getPropertyName(string propertyName1, string propertyName2, int propertyNameLength);rn3。调用的时候,我写成如下rnstring str1, str2;rnnPropertyNameLength = 0;rngetPropertyName(str1, str2, nPropertyNameLength))rnrnrn正确的步骤和写法应该是怎么样的?
C#调用C DLL文件
这是我调用的 [DllImport("Zhuzhan.dll", 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?
有以下疑惑:rn1、c++的dll和c的dll有什么区别?rn2、c#调用c的dll的时候有什么不同?rnrn有人说,c#调用c的dll还要中间加一层c++的封装?rnrn另,我用vc6写以下的代码,有什么错?rnrn[code=C/C++]rn//dll.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//dll.hrnextern "C " _declspec(dllimport) int add(int a,int b); rnextern "C " _declspec(dllimport) 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.dll" (ByVal icdev,ByRef CardSN&) As Longrn rn上面是 VB 6.0 中调用 C DLL的代码 rn------------------------------------------------------------------------------------ rn那么 C# 遇到 &CardSN 该怎么写呢,请教,不胜感激 rn
C#调用C的dll的CString的问题
拿到的dll是C++写的,里面有CString的数据类型,用C#该怎么用呢?高手指正一下。
关于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#写的调用代码如下:rn[DllImport("SmgpDll.dll", 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每次调用就报"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"rn请高手解答
C#调用C/C++ dll问题
C/C++ DLL里的函数定义:rnextern "C" __declspec(dllexport) int __stdcall pfs_login (char request[], char response[],int bufSize, char address[]);rnresponse是输出参数,其他的全部是输入参数rnrn在c#里怎么调用这个dll,不知道怎么写。谢谢。
C# 调用 C/C++ DLL的问题!
方法都能成功调用,但是回调函数都不能调用,我用的委托。
c# 调用c/c++ dll 参数问题
该文章纯属笔记,遇到一个问题,就在纪录到这里,方便以后的查询。 1:我们有时候想得到c/c++ 参数的返回值。(2016-10-13)              C/C++函数原型:                    MotionControl(char *command,char *confirm,char *message);             此处我们想获取mess
C#调用C的dll文件问题
现在我有个C写的c.dll文件,想在C#里调用,有一个函数是传给结构体的,不知道在C#中怎么写这函数。rn这个函数是:rnint initialize(CCallbackInterface *CCallbackInterface)rn参数名 类型 描述rnCCallbackInterface CCallbackInterface* 回调函数指针结构体rnrn我在c.h里看到CCallbackInterface这结构是:rnrnstruct _CALLBACKINTERFACErn void (*onGetCapabilityToken)(); rn void (*onConnected)(); rn void (*onConnectError)(int reason); rn...rn;rntypedef struct _CALLBACKINTERFACE CCallbackInterface;rnrn现在我在C#中这样用rnpublic struct _CALLBACKINTERFACErn void onGetCapabilityToken(); rn void onConnected(); rn void onConnectError(int reason); rn ...rn rnrn[DllImport("c.dll", EntryPoint = "initialize")] //初始化rn public static extern int initialize(_CALLBACKINTERFACE CCallbackInterface); rnrn我不知道对不对,因为我不知道在窗口cs中调用这个initialize的时候_CALLBACKINTERFACE这个要怎么传,知道的指教下,谢谢
C# 调用C语言DLL问题
我用C# 调用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调用出的问题:rn未能从程序集“Couns_Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“Couns_Test.Form1”,因为方法“addCon”没有实现(没有 RVA)。rnrn请问各位,这个问题是怎么解决。rn
C# 调用C/C++ dll 问题
C/C++ rn DWORD _stdcall GetSerialNumrn(rn IN HANDLE hCard, rn OUT BYTE bSerial[NUMLEN] rn);rnrn我写的:rn [DllImport("HS.dll", EntryPoint = "GetSerialNum")]rn public static extern uint GetSerialNum([In]uint handl, [MarshalAs(UnmanagedType.LPArray)] byte[] data);rnrn调用方法:rn byte[] array= new byte[255];rn Common.GetSerialNum(KeyHandle, array);rnrn返回来的array 我用Encoding.Default.GetString(array)转换,拿到的是乱码rn
C#中调用C生成的Dll 问题
C#中调用C生成的Dll,总报程序发生异常错误..不懂为什么..rnC的代码:rnint Sum(int a,int b)rnrn return a+b;rnrnC#中调用的代码:rn class Dllrn rn [DllImport("EssDll.dll",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前面调用Dll完成!\n");rn string ok = Console.ReadLine();rn rn rnrnC生成Dll是用Cywin来生成的,命令如下:rnEssDll:rn gcc -g -c ./src/EssDll.c -I./include -L./librn dllwrap -o EssDll.dll EssDll.o --def ./src/EssDll.defrn mv ./EssDll.o ./obj/rn mv ./EssDll.dll ./bin/rnrn*.def文件如下:rnLIBRARY EssDllrnEXPORTS rn Sum
C#调用C dll出现的问题
C dll 代码中的输出函数1rnextern "C" __declspec(dllexport) 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 dll 代码中的输出函数2rnextern "C" __declspec(dllexport) void disConnectServer();rnC#对应的函数形式rnpublic static extern void disConnectServer();rn这个连参数也没有,调用后报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。rnrnrn请问大概是什么原因,是我的C dll有问题,还是C#的使用方法有问题,谢谢!
C#调用C语言的dll问题
在C#里面调用一个用C语言写的dll,如果是用C去调用是这样的: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是的问题
#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文件,无法加载问题
如图在VS中直接引用添加时出现错误。需要直接将dll添加到项目生成的exe同一个文件夹下,或者在Import时采样绝对路径或相对路径方式。
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 struct _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.dll")]rnpublic static extern Byte[] InitializeDevice(UInt16 usVID, UInt16 usPID, ref GUID lpGUID,rn ref bool pbDriverInstalled);rnpublic struct 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调用如下: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(dllexport) 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(dllexport) 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问题
如有xx.dll,rn在c代码中,rn函数为:rninter* add (inter * a , inter *b);rn其中inter为结构体。rn用c#调用rnclase interrn[StructLayout(LayoutKind.Sequential)]rnrn...rnrn[DllImport("xx.dll")]rnrn public extern static (返回值) add ((返回值), (返回值));rnrn该函数返回值应该怎么写,参数应该怎么写。因为c代码中定义的该函数返回值和参数都是指针。rn
C#调用C动态DLL问题
我的系统为2003,用C写的DLL类库,C#的窗体去调用,没有问题。rn同样的项目,拿到XP系统下,调用就出现异常。rn这是部分错误信息.rnrn 有关调用实时(JIT)调试而不是此对话框的详细信息,rn请参见此消息的结尾。rnrn************** 异常文本 **************rnSystem.Runtime.InteropServices.COMException (0x8007007A): 传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A)rnrn
c#调用c编写的dll问题,char*
最近在弄一个rfid读卡的测试模块。需要调用c/c++编写的dll。但是一直弄不对,请大侠帮忙rnrndll函数原型rn函数声明 int WINAPI mifs_request_2(uchar _Mode, uchar *_TagType)rn功能描述 寻卡rn入口参数 _ Mode:模式 0x26 rn出口参数 TagType:卡类型rn返 回 值 0—成功,﹥0—失败rnrnrnc#的代码rn函数定义rn [DllImport("MifsDLL.dll", CharSet = CharSet.Ansi)]rn private static extern int mifs_request_2(rn byte bMode,rn StringBuilder strbCardTypern );rn函数调用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,char*指针的问题
要做一个读卡器的程序,厂商提供的C的dll,其中有个函数用到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.dll", 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的dll问题,急!
在C中使用的结构体是:rntypedef struct _Assetarrayrn u_short port;rn char* ip_addr;rn char* service;rn char* application;rn int discovery;rnAssetarray;rnrn我在C#中这样调用不行rn[ StructLayout( LayoutKind.Sequential ) ]rn public struct 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.dll", CharSet = CharSet.Auto)]rn public static extern int main_pads(Assetarray[] assetarray1);rn请问各位,上面的Assetarry结构体在C#对应什么? 我调用main_pads,传进参数数组Assetarray,rnAssetarray在函数里面赋值,然后我能在C#中使用assetarray1的数据.rn
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件