关于C#调用Win32 dll的问题。谢谢解答!

问题描述

我自己开发的一个dll,一个函数的参数是char*。但实际上函数内部是将其理解为一个short数组的指针进行处理的。我在C#里面使用[dllimport],重命名的函数参数应该使用String,还是byte[]数组??谢谢。

解决方案

解决方案二:
定义成refstring就可以了
解决方案三:
用refstring就可以了。怎么看不到回复呢?
解决方案四:
我并不需要dll里面可以更改传入的值内容。而是用byte和String到底应该哪个更合适呢?
解决方案五:
各位大侠,救救急哈。在线等答案哦。
解决方案六:
这样的话用string就可以了吧
解决方案七:
如果用string,比较痛苦。我必须将C#里面的short[]转换成byte[],然后将byte[]转换成字符串。很耗时,同时我不知道是否会在这些转换过程中,我的short[]是否会被改变。
解决方案八:
为什么要转换呢?定义为refstring并不是说让你在dll中去改值,而是加了ref后,可以认为传入的就是一个地址指针,与dll的参数是一致,至于内容,不需要把string转换成什么short[]或byte[]数组,只要dll拿到地址指针,就可以顺序读取到里面的值了。一般应用中,不加ref也是可以的,但如果dll中对值有改变而外面又需要时是需要加的。
解决方案九:
谢谢kemin的回答,但关键是我在C#里面就必须传入一个String哒。而我没有这个String,只有short[],所以我必须进行转换。
解决方案十:
C#中short类型与char类型是可以相互转换的,实际上,char类型在内存中保存的就是一个short值,如:charc1='中';shorts1=(short)c1;charc2=(char)s1;能完全转换而不会走样。所以要将short[]数据转换成字符串完全不是问题,直接转成char再拼成string就行了。先转换成byte[]再转字串,编码问题相当麻烦。
解决方案十一:
大概明白你的意思了。那是因为char刚好是两个字节。我如果是int或者double呢?我的确有这样的函数。顺便问下dll的函数abc(char*pData),我可否如下这样使用。[Dllimport(……)]abc(byte[]pdata)。如果可以,我愿意选择这种方式。
解决方案十二:
各位兄弟,帮忙看看啊。急需答案哦!
解决方案十三:
楼上的说法看似可以。我觉得那是因为char刚好和short一样长。那int,或者double怎么办呢?如何将int[]转换成String呢?

时间: 2024-07-31 09:48:18

关于C#调用Win32 dll的问题。谢谢解答!的相关文章

部署在server 2008 iis7.0的WebServices方法调用win32.dll时出错

问题描述 部署在iis7.0的WebServices的一个方法调用了win32.dll一旦调用这个方法应用程序池也关闭!页面出现无法访问!但是在部署在xpiis5.0的同样的WebServices就可以正常访问.是不是权限问题还是IIS7.0配置问题!是不是iis7.0的安全机制默认禁止调用win32非托管类库.如果是如何配置..请教高手................................. 解决方案

创建Win32 DLL,并在C#里面调用

创建 这是三篇网上收集的技术文章的合集,分别讲解了如何创建Win32 DLL,然后如何在C#里面调用这个DLL的教程. 首先是创建Win32 DLL的文章.讲解这个的文章到处都有,这里给出一篇我看过的:http://www.flipcode.com/articles/article_creatingdlls.shtml.Win32 DLL的创建其实在Visual Studio里面已经给出了比较好的模板,只是需要注意的,有些XXX_API宏并没有把extern "C"加进去,这样会造成在

native client能够调用第三方dll文件吗?

问题描述 native client能够调用第三方dll文件吗? 请求大神帮助:我刚学习native client相关知识,请求熟悉相关技术的大神指导下,native client如何调用第三方dll文件.谢谢了! 解决方案 native Client是指Chrome的吗? 不然可以用LoadLibrary等加载dll

C#2008 调用一个dll后,调试出现错误“不是有效的 Win32 应用程序”

问题描述 调用了dll里的一个初始函数,就报错了,请大家指点一下! 解决方案 解决方案二:"调用了dll里的一个初始函数"where?调用过程在哪?最近论坛怎么出现了好多发帖莫名其妙的家伙解决方案三:信息量太少,无法解答~解决方案四:调用代码呢?dll怎么定义的?解决方案五:是这样,我想上传附件,但是好像不能传!usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;

c#调用Win32 Api函数

在c#中可以通过互操作性服务using System.Runtime.InteropServices来调用window api函数.并且通过属性来指定api函数的位置,以及调用方式,比如,我们要调用User32.dll里的函数MessageBox(HWnd hwnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT type) 首先引入名字空间 using System.Runtime.InteropServices; 其次定义一个静态方法,并且指定调用的方式.其中用关

Java如何调用C++ DLL库_java

 最近做了一个网页端人脸识别的项目,用c++写了人脸识别的算法,但是在网页端要使用java后台,这其中就涉及到了java调用dll的问题.下面是小编通过查阅相关资料,实现的一个简单例子. 1.第一步,先在Java中新建一个类 如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll文件的代码了.然后我们需要dll中实现下面定义的加减乘除方法. 2.编译文件,文件名为Java2cpp.java,首先编译成class文件,如果用的是ecli

c#用Treeview实现FolderBrowerDialog 和动态获取系统图标(运用了Win32 dll类库)_C#教程

事情是这样子的.我需要做一个下面的东东: 这个不难啊,然后就用FolderBrowerDialog这个神器,嗯 还不错,刚开始客户用了也很喜欢. 可是过了一段时间之后,客户说 要屏蔽右键功能,他不想让其他通过右键能打开或浏览文件夹,如下面 红色要给屏蔽. 我一开始以为只是一个参数问题,就爽快的答应了客户咯.可是啊后来找啊找 找到天荒地老也木有找到...放弃了,然后改用了TreeView..结果,版本出来了,先截图: 好吧,确实很丑哦.. 复制代码 代码如下: public MyDirectory

Win32 DLL和MFC DLL 中封装对话框

现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32   DLL和MFC   DLL两个方面来分析并解决这个问题.           1.Win32   DLL               在Win32   DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件.然后使用DialogBox或者CreateDialog这两个函数(或相同作用的其它函数)来创建对话框,并定义

在WIN32 DLL中使用MFC

最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记   一.修改预编译头文件(stdafx.h) 在stdafx.h文件中添加下面代码,包含一些MFC的头文件,这些可以在一个MFC工程中复制过来 1 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将为显式的 2 3 #include