项目中,业务要求实现一个这样功能, VB6.0程序引用一个C#做成的DLL程序, 初期化时VB6.0把自己的一个方法注册到C#程序中, 在某种条件下,触发事件在C#程序中,再回调VB6.0传进来的方法.
回调的处理已经实现了,但参数传递问题如何解决,VB6。0传递的是方法地址指针.C#程序:
namespace ApIfVb 
{
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    public delegate void CallBackFunction(String strVal);    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("45BD35F5-ADC6-4e87-B68C-4AF9DEC464D1")]
    public interface IApIfAccess 
    {
        [DispId(1)]
        String AttachToVBEventMethod(int address);
    }    [Guid("C1AAE61C-CE78-4b53-909D-98CE668647B2"), ClassInterface(ClassInterfaceType.None)]
    public class ApIfAccess : MarshalByRefObject,IApIfAccess
    {
        //事件委託
        public static Delegate onEventChange = null;        public static CallBackFunction callBackFun = null;        /// <summary>
        /// VB初期化処理
        /// </summary>
        /// <param name="address">事件指針</param>
        public String AttachToVBEventMethod(int address)
        {
            CallBackFunction1 callback = (CallBackFunction1)Marshal.GetDelegateForFunctionPointer(
                new IntPtr(address), typeof(CallBackFunction1));
            SetCallbackMethod(callback);
            callBackFun1 = callback;            if (ApIfAccess.onEventChange != null)
            {
                Object[] obj = { "Send" };
                onEventChange.DynamicInvoke(obj);
            }            return "VB ServerStart!!!";
        }  
        private void SetCallbackMethod([MarshalAs(UnmanagedType.FunctionPtr)] 
            CallBackFunction callback)
        {
            onEventChange = callback;          
        }
}VB6.0程序:
建立一个WINFROM程序,并且通过COM引用C#[ApIfVb]DLL程序:
Dim comAccesss As New ApIfVb.ApIfAccess
Private Sub Form_Load()
    Text1.Text = comAccesss.AttachToVBEventMethod(AddressOf VbRollBack)
End Sub
再建立一个Module1:
Public Sub VbRollBack(ByVal strVal As String)
    Form1.Text2.Text = Form1.Text2.Text + strVal + "AddVBThred "
End Sub执行的时候VB端会出现异常,
'-2147467261'(80004003)',提示被保护的参数,禁止被读取。以上,请各路大侠帮忙看看,如何解决VB6。0回调传参数的问题,谢谢了!!!