请问C#如何与vc的dll<-->之间传递一个对象?
比如
c#一个object
传到Vc的dll中用
vc的dll中有一个object.让c#用..

解决方案 »

  1.   

    采用进程间通信技术:   
    在VC里,根据C#窗体名称找到窗体句柄
    HWND   FindWindow(LPCTSTR lpClassName,LPCTSTR   lpWindowName);   
    定义一个数据结构COPYDATASTRUCT作为lparam,通过向C#窗体发送WM_COPYDATA消息   
    lResult=SendMessage((HWND)   hWndControl, (UINT)WM_COPYDATA,(WPARAM)wParam,(LPARAM)lParam);       
    在C#窗体的WndProc函数里,截取WM_COPYDATA消息,取得lparam的内容
      

  2.   

    C#按照C++中定义,定义个一样的struct。在调用的使用传递(void *) ,然后C++将这个void *转换成你C++里面定义的结构就可以了。
      

  3.   

    如果vc 是托管程序,可以直接引用,如果非托管的
    例如传递 vc++ 以下结构
    typedef struct _SYSTEMTIME { 
        WORD wYear; 
        WORD wMonth; 
        WORD wDayOfWeek; 
        WORD wDay; 
        WORD wHour; 
        WORD wMinute; 
        WORD wSecond; 
        WORD wMilliseconds; 
    } SYSTEMTIME, *PSYSTEMTIME;
    C# 这样写
    [ StructLayout( LayoutKind.Sequential )]
    public class SystemTime 
    {
       public ushort year; 
       …
       public ushort milliseconds; 
    }public class LibWrap 
    {
       // Declares a managed prototype for the unmanaged function.
       [ DllImport( "Kernel32.dll" )]
       public static extern void GetSystemTime( [In,Out] SystemTime st );
    }
      

  4.   

    两种开发环境之间传递对象,object这个类型包容面太大了。
    是字符串、数组、文件、COM、OLE、DLL,还是具体问题具体分析吧。
      

  5.   

    传递结构可以。但传递对象(对象不仅包括数据,还包括行为等),意味着C#要理解C++对象,C++要了解C#对象。要互相了解,需要有约定的方式。C++采用的是包含头文件的方式,.Net采用的是元数据(Meta Data)的方式,COM采用的是Type Library或IDL描述的方式。C#并不能直接用C++的头文件,因此它没有办法了解C++对象。比如它就不能调用对象函数,也不能析构C++对象。不能析构对象就意味着可能的内存泄露。非托管C++同样不能理解C#对象。即使在P/Invoke调用时,CLR也不能直接把对象传给非托管世界,而要把C#对象列集(Marshal)为C++能理解的数据。
      

  6.   

    试试将其中的如C#项目做成DLL文件在另一个中调用
      

  7.   

    数据定义会比较繁琐,
    比如结构体有可能需要指定类型
    [System.Runtime.InteropServices .UnmanagedType.I8]之类的