日期:2014-05-17  浏览次数:20767 次

.dll函数调用问题
我在开发中要用到一个别人提供的开发包,主要为一个.dll动态链接库,其中的调用函数我不知道在C#中应该如何改写,请高人指点一二,谢谢了!

function MC_SetFileName(PlayerID : integer; FileName:Pchar):integer;stdcall;
function MC_SetSN(RegStr : Pchar):integer;stdcall;
function MC_GetVU(PlayerID:integer;ChannelID:Byte) : Word; stdcall;
------最佳解决方案--------------------
integer -> int
Pchar -> StringBuilder
Byte -> byte
------其他解决方案--------------------
你手头上肯定有C++开发人员开发的dllDemo.dll,比如这个dllDemo.dll就只有求和,求最大值,求最小值的DLL,他们已经为你打包好了,那么下面举个例子,如何调用这个DLL.

/在c#中调用。新建,项目,控制台应用程序。(注意是C#,不是C#环境您重新切一下),
//在Program.cs中贴入以下代码:
//by 孔苏群  2012-11-29
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;//引入dll文件中的函数   
class Program
{        //引入dll文件中的函数        
    [DllImport("dllDemo.dll")]
    private static extern int Sum(int a, int b);
  // private static extern int MC_SetFileName(int PlayerID , StringBuilder FileName)
    [DllImport("dllDemo.dll")]
    private static extern int Max(int a, int b);
//   知道怎么改了吧
    [DllImport("dllDemo.dll")]
    private static extern int Min(int a, int b);
    static void Main(string[] args)
    {
        int a = Sum(3, 5);
        Console.WriteLine(a);
        Console.WriteLine(Max(5, 10));
        Console.WriteLine(Min(12, 25));
        Console.ReadKey();//直接main里边最后加个Console.Read()不就好了。要按键才退出。 }   
    }
}

根据以上的我写的例子
可以得出
------其他解决方案--------------------
用dllimport关键字的话注意类型之间的对应就行了
调用就直接方法名(参数)就能调用了、

LZ可以用clr  c++去写你的本地c++ Dll(听说这种方式才算高手)
然后C#就能直接引用clr的C++dll了、
我也刚学、
------其他解决方案--------------------
以下这个函数要使用C#应如何改写和调用了,很急,请高手帮帮忙,谢谢了!

3.1)通用函数:
3.1.1) AutoOpenComPort():自动连接串口
功能描述:
该函数用于自动识别与读写器连接的串口并且执行初始化操作,然后通过连接串口和读写器以创建通信连接。数据传输协议是57600 bps,8位数据,1停止位,没有奇偶校验位。
在调用其它函数之前,您必须先连接串口和读写器。
应用:
Function int StaticClassReaderB.AutoOpenComPort(int* Port, unsigned char *ComAdr, unsigned char * Baud ,int* FrmHandle);
参数:
Port:输出变量,COM1—COM12与读写器连接的串口号。
ComAdr:输入/输出变量,远距离读写器的地址。以广播地址(0xFF)调用此函数,函数将检测各个端口,并将检测到的连接有读写器的端口以及该端口上读写器的实际地址回写到指针Port和ComAdr所指变量中;以其它地址调用此函数,将在各个端口检测是否连接了具有指定ComAdr地址的读写器,并将检测到的端口号回写到指针Port所指变量中。
Baud:输入变量,用该值设置或更改串口通讯控件的波特率。
baudrate 实际波特率
0 9600bps
1 19200 bps
2 38400 bps
4 56000 bps
5 57600 bps
6 115200 bps
  FrmHandle:输出变量,返回与读写器连接端口对应的句柄,应用程序通过该句柄可以操作连接在相应端口的读写器。如果打开不成功,返回的句柄值为-1.
COM1-COM12的含义如下:
#define COM1      1
#define COM2      2
#define COM3      3