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();
{
[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();
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯