电热水器使用说明书(美的电热水器使用说明书) LED发光二极管(led发光二极管电压是多少) 丰胸的最快方法3+3动作加瑜伽让你拥有傲人胸器(最有效瑜伽的运动丰胸方法) 少年歌行名剑谱排名(剑谱排名) gif动图怎么压缩?如何在线压缩gif大小?(在线压缩gif图片大小) 杨玉环怎么玩连招(杨玉环怎么玩连招视频) 乳糜血(乳糜) 怎么学高中历史的窍门(怎么学高中历史的窍门和技巧) 梨树的作用与功效(梨树的作用与功效图片) 蓝芩口服液的功效与作用和蒲地蓝口服液的区别(蓝芩口服液的功效与作用) js 随机数整数(js随机数整数) 湖州火车站附近酒店(湖州火车站) QQ飞车城邦守护兽怎么进化(QQ飞车城邦守护兽) 韩式盘发简单教程(韩式盘发简单教程图解) 地下城assertion failed错误怎么办(assertion failed怎么解决) 向量相乘坐标公式怎么推算出来的(向量相乘坐标公式) 拉丁舞裙服装怎么画(拉丁舞裙服装怎么画简笔画) 裁决之镰怎么解除(裁决之镰怎么办) 10178什么意思(1017代表什么意思) 如何选择进口婴儿奶粉(如何选择进口婴儿奶粉牌子) EVIDENT与深圳湾实验室举办首届EVIDENT Discovery Center生物成像主题研讨 合肥欢乐岛旅游攻略(合肥欢乐岛旅游攻略路线) 侏儒症的症状及病因(侏儒症的症状) 漂白 护理牙齿如何变白?(漂白牙齿怎么漂白) 波尔多液怎么配制?(波尔多液怎么配制用来防治西瓜枯萎病) tam是什么意思啊(TAM是什么意思) 手把手教你如何用百度网盘下载BT种子文件(百度网盘如何使用种子文件下载) 采访问题怎么写(采访问题) 英雄联盟如何参与MSI半决赛活动(英雄联盟msi比赛赛程) 架立筋图片示意图(架立筋图片) 最右如何添加交友卡(最右怎么看交友卡) 鹅口疮该如何治疗(鹅口疮该如何治疗才能好) 海贼王克比头像(海贼王克比) 怎么在机蜜租一辆特斯拉汽车?(如何租特斯拉) IE浏览器出错崩溃怎么办?(电脑提示ie浏览器崩溃是什么意思) 情人节送男朋友礼物吗(情人节送男朋友礼物) AutoCAD中制作等高线地形图(cad中怎么画等高线地形图) 第二年车险计算方法(第二年车险计算方法怎么算) 神雕侠侣后传第一部(神雕侠侣后传) 不可不学的摄影技巧 七:婴儿摄影技巧(儿童摄影拍摄技巧) 陶瓷密度天平的使用方法及详细操作步骤(陶瓷密度天平的使用方法及详细操作步骤图片) 浙江杭州同济科技职业学院(杭州同济科技职业学院) 蛋挞的家常做法(葡式蛋挞的家常做法) 标准文献检索渠道(国内的标准文献检索的主要途径不包括( )) 魔兽世界海加尔山之战现在的入口在哪?(魔兽世界海加尔山在哪里) 挞伐的意思(挞伐) 网易企业邮箱客户端设置:[1]POP设置 Win7(网易邮箱pop服务器设置) 手机进水怎么处理最好?(手机进水怎么处理最好用) 价外税名词解释(价外税) 爷爷的爷爷的爸爸怎么叫(爷爷的爷爷的爸爸怎么叫的)
您的位置:首页 >百科精选 >

英雄联盟找不到程序入口点setupdiget

导读 关于英雄联盟找不到程序入口点setupdiget这个问题很多朋友还不知道,今天小六来为大家解答以上的问题,现在让我们一起来看看吧!1、第一步

关于英雄联盟找不到程序入口点setupdiget这个问题很多朋友还不知道,今天小六来为大家解答以上的问题,现在让我们一起来看看吧!

1、第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和: LIBEXPORT_API int mySum(int a,int b){ return a+b;} C# 导入定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=***.Auto,CallingConvention=CallingConvention.StdCall)] public static extern int mySum (int a,int b); } 在C#中调用测试: int iSum = RefComm.mySum(,); 运行查看结果iSum为5,调用正确。

2、第一步试验完成,说明在C#中能够调用自定义的动态链接库函数。

3、 第二步,我定义了字符串操作的函数(简单起见,还是采用前面的函数名),返回结果为字符串: LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a); return a;} C# 导入定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=***.Auto, CallingConvention=CallingConvention.StdCall)] public static extern string mySum (string a, string b); } 在C#中调用测试: string strDest=""; string strTmp= RefComm.mySum("45", strDest); 运行查看结果 strTmp 为"45",但是strDest为空。

4、我修改动态链接库实现,返回结果为串b: LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a) return b;} 修改 C# 导入定义,将串b修改为ref方式: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=***.Auto,CallingConvention=CallingConvention.StdCall)] public static extern string mySum (string a, ref string b); } 在C#中再调用测试: string strDest=""; string strTmp= RefComm.mySum("45", ref strDest); 运行查看结果 strTmp 和 strDest 均不对,含不可见字符。

5、再修改 C# 导入定义,将CharSet从Auto修改为Ansi: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)] public static extern string mySum (string a, string b); } 在C#中再调用测试: string strDest=""; string strTmp= RefComm. mySum("45", ref strDest); 运行查看结果 strTmp 为"45",但是串 strDest 没有赋值。

6、第二步实现函数返回串,但是在函数出口参数中没能进行输出。

7、再次修改 C# 导入定义,将串b修改为引用(ref): public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)] public static extern string mySum (string a, ref string b); } 运行时调用失败,不能继续执行。

8、 第三步,修改动态链接库实现,将b修改为双重指针: LIBEXPORT_API char *mySum(char *a,char **b){sprintf((*b),"%s",a); return *b;} C#导入定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)] public static extern string mySum (string a, ref string b); } 在C#中调用测试: string strDest=""; string strTmp= RefComm. mySum("45", ref strDest); 运行查看结果 strTmp 和 strDest 均为"45",调用正确。

9、第三步实现了函数出口参数正确输出结果。

10、 第四步,修改动态链接库实现,实现整数参数的输出: LIBEXPORT_API int mySum(int a,int b,int *c){ *c=a+b; return *c;} C#导入的定义: public class RefComm { [DllImport("LibEncrypt.dll", EntryPoint=" mySum ", CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)] public static extern int mySum (int a, int b,ref int c); } 在C#中调用测试: int c=0; int iSum= RefComm. mySum(,, ref c); 运行查看结果iSum 和c均为5,调用正确。

11、 经过以上几个步骤的试验,基本掌握了如何定义动态库函数以及如何在 C# 定义导入,有此基础,很快我实现了变长加密函数在 C# 中的调用,至此目标实现。

12、 三、结论 在 C# 中调用 C++ 编写的动态链接库函数,如果需要出口参数输出,则需要使用指针,对于字符串,则需要使用双重指针,对于 C# 的导入定义,则需要使用引用(ref)定义。

13、 对于函数返回值,C# 导入定义和 C++ 动态库函数声明定义需要保持一致,否则会出现函数调用失败。

14、定义导入时,一定注意 CharSet 和 CallingConvention 参数,否则导致调用失败或结果异常。

15、运行时,动态链接库放在 C# 程序的目录下即可,我这里是一个 C# 的动态链接库,两个动态链接库就在同一个目录下运行。

本文分享完毕,希望对大家有所帮助。

标签:

免责声明:本文由用户上传,如有侵权请联系删除!