中易网

VC写得dll在C#中如何调用,如何转化成C#代码

答案:1  悬赏:0  
解决时间 2021-01-11 10:29
  • 提问者网友:半生酒醒
  • 2021-01-10 11:28
VC写得dll在C#中如何调用,如何转化成C#代码
最佳答案
  • 二级知识专家网友:woshuo
  • 2021-01-10 12:53
class Program
{
[StructLayout(LayoutKind.Sequential)]
struct TFileParam
{
byte Effect;
byte Level;
byte Speed;
byte Delay;
byte Font;
byte ShowTitle;
byte TitleColor;
byte WordColor;
} ;

[DllImport("xxx.dll", EntryPoint="SS_Open_Com", CallingConvention=CallingConvention.StdCall)]
extern static int SS_Open_Com(int addr, int com, int baud, int delay);

[DllImport("xxx.dll", EntryPoint = "SS_Open_Tcp", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
extern static int SS_Open_Tcp(string sIP, int port, int delay);

[DllImport("xxx.dll", EntryPoint = "SS_Open_Udp", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
extern static int SS_Open_Udp(string sIP, int port, int delay);

[DllImport("xxx.dll", EntryPoint = "SS_Get_Window_List", CallingConvention = CallingConvention.StdCall)]
extern static unsafe byte* SS_Get_Window_List();

[DllImport("xxx.dll", EntryPoint = "SS_Send_File", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
extern static int SS_Send_File(int W_index, ref TFileParam param, string ListFile, int IsSave);

[DllImport("xxx.dll", EntryPoint = "SS_Send_Buffer", CallingConvention = CallingConvention.StdCall)]
extern static int SS_Send_Buffer(int W_index, ref TFileParam param, byte[] Buffer, int IsSave);
}

具体情况我没办法测试。只能写到这里了。
如果有需要自己加上public
记得要using System.Runtime.InteropServices;
工程编译的时候属性的“生成”里面要“允许不安全的代码”,不然不能用指针追问public static extern unsafe byte* SS_Get_Window_List();
这个运行报错
错误 1 不安全代码只会在使用 /unsafe 编译的情况下出
还有就是extern "C" __declspec(dllexport) void __stdcall SS_Close(void);
extern "C" __declspec(dllexport) int __stdcall SS_Send_Time(void);
extern "C" __declspec(dllexport) int __stdcall SS_Send_Reset(void);这几个用C#如何调用追答所以我刚刚都说让你在工程属性的“生成”页面勾选“允许不安全的代码”了
不然C#里不让你用指针的。

那三个:
[DllImport("xxx.dll", EntryPoint = "SS_Close", CallingConvention = CallingConvention.StdCall)]extern static void SS_Close();
[DllImport("xxx.dll", EntryPoint = "SS_Send_Time", CallingConvention = CallingConvention.StdCall)]extern static int SS_Send_Time();
[DllImport("xxx.dll", EntryPoint = "SS_Send_Reset", CallingConvention = CallingConvention.StdCall)]extern static int SS_Send_Reset();
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息