这样的原来的回调函数在vb里面是可以的 在vb里面是这样的
'登录,Uin是Uin号,Pass是密码
Public Declare Sub CmdLoginDll Lib "server.dll" (ByVal addr As Long, _
        ByVal Status As Long, ByVal UIN As Long, ByVal name As String, ByVal Pass As String)
addr是回调函数地址  
实际调用是这样的
Call CmdLoginDll(AddressOf ExeLoginReply, 11, CLng(Text6.Text), "", Text7.Text)
Sub ExeLoginReply(ByVal nVer As Long, ByVal UIN As Long, ByVal i As Long, ByVal parm As String)
//end sub
现在想把他转成C# 问下 如何转

解决方案 »

  1.   

    我这样写的 但是出现我未将引用对象设置到对象实例 错误
    1.定义回调
    public delegate void ExeLoginReply(IntPtr css);
    2.定义引用的dll函数
    [DllImport("server.dll")]
    public static extern void CmdLoginDll(ExeLoginReply addreply,long Status,long UIN,string name,string Pass);
    3.定义结构
    [StructLayout(LayoutKind.Sequential, Pack = 1)] 
    public struct LOGIN
    {
    public int nVer;
    public int UIN;
    public int i;
    public string parm;
    }
    4.定义回调函数的转换
    public static void LoginReply(IntPtr temp)
    {
    LOGIN l=new LOGIN();
    l=(LOGIN)Marshal.PtrToStructure(temp,typeof(LOGIN));
    }
    5.实际调用ExeLoginReply addreply=new ExeLoginReply(LoginReply);
    CmdLoginDll(addreply,11,10000,"","123321");出现我未将引用对象设置到对象实例 错误
    请教了
      

  2.   

    using System;
    using System.Runtime.InteropServices;public delegate bool CallBack(int hwnd, int lParam);public class EnumReportApp {    [DllImport("user32")]
        public static extern int EnumWindows(CallBack x, int y);     public static void Main() 
        {
            CallBack myCallBack = new CallBack(EnumReportApp.Report);
            EnumWindows(myCallBack, 0);
        }   public static bool Report(int hwnd, int lParam) { 
            Console.Write("Window handle is ");
            Console.WriteLine(hwnd);
            return true;
        }
    }
      

  3.   

    曾经帮你调试过,但找不到server.dll,无法调试。
      

  4.   

    Sub ExeLoginReply(ByVal nVer As Long, ByVal UIN As Long, ByVal i As Long, ByVal parm As String)
    =========
    你定义的委托不完全
      

  5.   

    to  hdt(倦怠):
    这个是在vb里面定义的回调函数 里面的内容我没写
    vb里面可以这样定义的 vb我也调式了 ok的
      

  6.   

    to  hdt(倦怠):那个sample我也看了 其实和我的差不多阿 我是把回调的参数转换成strcut
    Snowdust(雪尘):谢谢你啊 但是dll很复杂的 有客户的dll和server的dll
      

  7.   

    to  hdt(倦怠) 我更改成你的例子看看 555
      

  8.   

    出现我未将引用对象设置到对象实例 错误
    很可能是你的函数定义和DLL里面定义的不一致,自己看看吧~