如果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 ); }
在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的内容
例如传递 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 );
}
是字符串、数组、文件、COM、OLE、DLL,还是具体问题具体分析吧。
比如结构体有可能需要指定类型
[System.Runtime.InteropServices .UnmanagedType.I8]之类的