C# 正确的P/Invoke函数签名 下面是C++函数< /p>的声明 typedef long (CALLBACK* PAMSGETMSGW)(char *,char *,q_address *, short *, short *, short *, short *, long *, long *, struct PSB *, struct show_buffer *, long *, char *, char *, char * );

C# 正确的P/Invoke函数签名 下面是C++函数< /p>的声明 typedef long (CALLBACK* PAMSGETMSGW)(char *,char *,q_address *, short *, short *, short *, short *, long *, long *, struct PSB *, struct show_buffer *, long *, char *, char *, char * );,c#,c++,c#-4.0,c#-3.0,C#,C++,C# 4.0,C# 3.0,我用c语言创建了以下声明# 我说的对吗?我从你的另一篇文章中知道,byte[]可能适用于第一个参数,但如果没有上下文,人们会告诉你需要使用string。问题是,仅仅说short*,并不能告诉你它是指向一个还是多个。该死,这是一个丑陋的函数。你需要的昂贵的Oracle顾问不会免费提供建议。检查你是否正确的最好方法是测试它并验证返回值。 [DllImport(@"C:\Program Files\Oracle\Oracle MessageQ\bin\DmqCl32.dll")] publi

我用c语言创建了以下声明#


我说的对吗?

我从你的另一篇文章中知道,
byte[]
可能适用于第一个参数,但如果没有上下文,人们会告诉你需要使用
string
。问题是,仅仅说
short*
,并不能告诉你它是指向一个还是多个。该死,这是一个丑陋的函数。你需要的昂贵的Oracle顾问不会免费提供建议。检查你是否正确的最好方法是测试它并验证返回值。
[DllImport(@"C:\Program Files\Oracle\Oracle MessageQ\bin\DmqCl32.dll")]
     public static extern int pams_get_msgw(byte[] msg_area, ref byte priority, out q_address source,
          out short clas, out short type,
          ref short msg_area_len, out short len_data, ref int timeout,
          ref int sel_filter, out PSB psb, out ShowBuffer show_buffer,
          ref int show_buffer_len, ref int large_area_len, out int large_size,
          [MarshalAs(UnmanagedType.LPStr)] string nullarg_3);