您的位置:首页 > 编程语言 > C语言/C++

c++.net调用c#类库

2008-01-15 09:51 369 查看
参考: http://www.codeproject.com/csharp/com_object_in_c_.asp
1.直接调用
//#using "../debug/CSLib.dll" 等于在工程中添加引用,addrefernce
using namespace ClassLibrary2;
ClassLibrary2::Form1^ xxForm = gcnew Form1();
2.c#写的DLL做成COM,生成的tlb供c++。net调用;
namespace ClassLibraryCCharp
{
[Guid("40699C45-4741-4507-971E-E0A32488CE42")]
//[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface InterfaceTest
{
void SetParentHandler(Int32 nParentHandler);
Int32 GetWindowHandler();
void CreateForm(Int32 nParentHandler);
void MoveFormSize(int x, int y, int nHeght, int nWidth);
void CloseWindow();
}
}
namespace ClassLibraryCCharp
{
public class TestImp : InterfaceTest
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SetParent(int hWndChild, int hWndNewParent);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetParent(int hWndChild);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool MoveWindow(int hWnd, int x, int y, int width, int height, bool bRepait);

public TestImp()
{
}

private Form _xxForm = null;

public void SetParentHandler(Int32 nParentHandler)
{
}

public Int32 GetWindowHandler()
{
if (_xxForm != null)
return _xxForm.Handle.ToInt32();
return 0;
}

public void CreateForm(Int32 nParentHandler)
{
_xxForm = new AForm();
SetParent(_xxForm.Handle.ToInt32(), nParentHandler);
_xxForm.Show(new ExternWindow(nParentHandler));
}

public void MoveFormSize(int x, int y, int nHeght, int nWidth)
{
if (_xxForm != null)
{
_xxForm.Left = 0;
_xxForm.Top = 0;
_xxForm.Width = nWidth;
_xxForm.Height = nHeght;
}
}
public void CloseWindow()
{
if (_xxForm != null)
{
_xxForm.Close();
}
}
}

sealed class ExternWindow : IWin32Window
{
IntPtr m_Hanler;
public ExternWindow(long nHandler)
{
m_Hanler = (IntPtr)(nHandler);
}

public IntPtr Handle
{
get { return m_Hanler; }
set { m_Hanler = value; }
}
}

}
注册为com interrop。
必须生成强程序集名称

//sn -k Database_COM_Key.snk
//[assembly: AssemblyKeyFile("Database_COM_Key.snk")]


c++调用
#import "../ClassLibraryCCharp/bin/debug/ClassLibraryCCharp.tlb" raw_interfaces_only
using namespace ClassLibraryCCharp;
CoInitialize(NULL);
InterfaceTestPtr pTest(__uuidof(TestImp));
pTest->CreateForm((long)hWnd);
pTest->MoveFormSize(0, 0, 100,100);

long xxFormHanlder = 0;
pTest->GetWindowHandler(&xxFormHanlder);

CoUninitialize();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: