TBusinessPackege   = function(pack485:array of TMessage485;var returnPack485 :array of TMessage485;count :integer) : integer;stdcall;
这个是在DELPHI7中申明的一个函数指针,我在C#中(2005)该如何申明一个委托,传入过去,让其执行啊。
 public delegate int dlBussPack485([MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Struct, SizeConst = 61)]TMessage485[] pack485, int reccount, ref TMessage485[] returnPack485, int returnCount, int count);
这个委托是我目前的调用,可以传递过去,就是参数不对,returnPack485传过来是NULL。
请各位帮忙出出注意,谢谢了!

解决方案 »

  1.   

    用Delphi做一个DLL壳,看传入的参数是否正确
      

  2.   

    1楼的问题,动态数组被Delphi编译器解释为2个参数,一个是数组指针,一个是数组长度
    PUSH    0                               
    MOV     EAX, DWORD PTR [405668]         
    CALL    00402F94                        取数组长度
    PUSH    EAX                             
    MOV     EAX, DWORD PTR [405668]         取数组地址
    PUSH    EAX                             
    MOV     EAX, DWORD PTR [405664]         
    CALL    00402F94                        取数组长度
    PUSH    EAX                             
    MOV     EAX, DWORD PTR [405664]         取数组地址
    PUSH    EAX                             
    CALL    004033E8                        调用 BusinessPackege可以看到在调用BusinessPackege前Push了5个参数
      

  3.   

    1 参数个数都不同,为什么会这样??
    其实DELPHI 使用的ARRAY参数在C++和C#中调用的时候必须要多个参数,否则调用是不会成功。
    2 这个委托是在DELPHI做的DLL中运行,传入的参数就是不对啦!
    不知道如何解决。
    目前我实现的:1 结构体传递 OK,2不带引用的结构体数组传递,3 回调函数也可以,虽然参数不对,但能够进入 
    就剩下这个 带引用的结构体数组传递了。。
    谢谢楼上两位,继续等待!