我試圖避免使用COM。我正在C++ exe上設計混合C#和C++控件。我可以使用C風格方法將C++接口導出到C#dll
我想到的一個方法是從C#中調用我的C++ EXE,並將窗口消息發送到C#窗口。然而,我在控件基類上調用的方法數量太長,無法證明Windows消息的合理性。
因此,如果可以將整個C#接口導出到C++ EXE,那將更容易。
我想避免使用COM,因爲我可能不得不支持Windows 2000,而不依賴於清單的情況下進行COM會成爲當前在註冊表中沒有設置太多的軟件包上的部署麻煩。
我試圖避免使用COM。我正在C++ exe上設計混合C#和C++控件。我可以使用C風格方法將C++接口導出到C#dll
我想到的一個方法是從C#中調用我的C++ EXE,並將窗口消息發送到C#窗口。然而,我在控件基類上調用的方法數量太長,無法證明Windows消息的合理性。
因此,如果可以將整個C#接口導出到C++ EXE,那將更容易。
我想避免使用COM,因爲我可能不得不支持Windows 2000,而不依賴於清單的情況下進行COM會成爲當前在註冊表中沒有設置太多的軟件包上的部署麻煩。
我在VS 2010中使用C++/CLI來做到這一點。你可以公開一個可以以通常方式使用的DLL C接口,實現只需將數據從該接口編組到C#程序集。
相關的問題,我覺得Calling C# from C++, Reverse P/Invoke, Mixed Mode DLLs and C++/CLI
我們確定你的意思是我可以用所有抽象方法制作一個C++抽象類,並讓C#調用這些方法。如果可以的話,我正在嘗試動態多態。 –
你可以寫爲每個C++控制的C包裝和PInvoke的從C#。
例如這個C++類:
class Example
{
public:
int MyMethod(int param);
}
,並在你的c一的extern 「C」 塊++ EXE:
void * CreateExample() { return new Example(); }
int Example_MyMethod(void * handle, int param) { reinterpret_cast<Example*>(handle)->MyMethod(param)); }
,並在C#:
public class Example
{
private IntPtr handle;
public Example()
{
handle = _CreateExample();
}
public int MyMethod(int param)
{
return _MyMethod(param);
}
[DllImport("yourdll.exe")]
private static extern IntPtr _CreateExample();
[DllImport("yourdll.exe")]
private static extern int _MyMethod(IntPtr handle, int param);
}
太糟糕了你不能使用COM,因爲它會使這個微不足道。 –
是你想避免使用註冊表的唯一問題?通常,COM使用註冊表進行CoCreate和跨公寓編組;但如果你不需要做這些(例如,可以使用P/Invoked API而不是CoCreate),那麼你將不會碰到註冊表,並且仍然可以使用CLR的COM interop支持的其餘部分。 – BrendanMcK