C++ 里面定义:这个类是要作为返回值的class IBean
{
public:
    virtual const char* _stdcall getSessionId() = 0;
    virtual const char* _stdcall getCallId() = 0;
    virtual const char* _stdcall getDirection() = 0;
    virtual const char* _stdcall getStateEvent() = 0;
};我在C# 里面怎么定义?   我这样定义可以接受到值, 但是字段对应不上,而且乱码。    public struct IDialogBean
    {
        public string getSessionId;
        public string getCallId;
        public string getDirection;
        public string getStateEvent;
   }   这样定义又会报错。      public class IDialogBean
    {        public virtual string getSessionId() { return String.Empty; }
       public virtual string getCallId() { return String.Empty; }
        public virtual string getDirection() { return String.Empty; }
        public virtual string getStateEvent() { return String.Empty; }
}
     interface  和  abstract  都是不行的。     求大神指点, 我在C# 里面要怎么定义 C++  virtual const char* _stdcall getSessionId() = 0; 方法C#C++

解决方案 »

  1.   

    IBean是C++中的一个类,在C#中不能直接用结构或类来处理,你可以用接口试试,不能保证能成功:比如C++中有个函数是用于得到IBean的: IBean GetIBean();
    ///定义接口
    public interface IBean

        string getSessionId();
        string getCallId();
        string getDirection();
        string getStateEvent();
    }public void test()
    {
        IBean ib=GetIBean();//得到这个基于IBean接口的对象
        string SessionId=ib.getSessionId();//得到SessionId
    }
      

  2.   

    已经尝试用 interface 来实现, 但是调用时一样会报错。。
    是不是还需要用什么来修饰?
      

  3.   

    参考:
    [DllImport("WIND.dll", EntryPoint = "CardNoDecrypt")]  
            static extern int CardNo(string as_Data, StringBuilder as_CardNo);
            public static string CardNo(string as_data)
            {
                int k = 8;
                //IntPtr a = (IntPtr)System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(as_data);
                StringBuilder cardno = new StringBuilder("error");
                //k = CardNo(a, cardno);
                k = CardNo(as_data, cardno);
                //Thread.Sleep(500);
                return cardno.ToString();
            }
    /////先给我5分吧,有问题提问。没分了呵呵呵
      

  4.   

    把C#里的string换成stringbuilder。
      

  5.   

    我觉得需要创建一个 vtable 传递给 C++。
      

  6.   

    c#不支持vc中的class,你要把vc的工程改成clr/unmanaged混合类型,定义一个托管类型
    public ref class Bean { ... }
    然后在c#工程中引用vc项目,就可以直接使用这个类了