0
我有一個應用程序,其中一個winform被C++/cli託管類初始化。他們都是獨立的項目,生成dll,並與託管項目引用winform dll(顯然)。從c#dll中回調C++/cli方法
因此,現在情況是在Winform中點擊某個按鈕,我需要在我的託管類中調用一個方法。我知道代表是要走的路,但是一些小代碼片段或關於如何去做這件事的一些指示將非常有幫助。
我有一個應用程序,其中一個winform被C++/cli託管類初始化。他們都是獨立的項目,生成dll,並與託管項目引用winform dll(顯然)。從c#dll中回調C++/cli方法
因此,現在情況是在Winform中點擊某個按鈕,我需要在我的託管類中調用一個方法。我知道代表是要走的路,但是一些小代碼片段或關於如何去做這件事的一些指示將非常有幫助。
下面是一個從WPF調用的C++/CLI函數的示例。
在C++/CLI側:
cppcli.h:
// cppcli.h
#pragma once
using namespace System;
namespace cppcli
{
public ref class cppClass
{
public:
String^ cppFunction(int value);
};
}
cppcli.cpp:
// This is the main DLL file.
#include "stdafx.h"
#include "cppcli.h"
namespace cppcli
{
String^ cppClass::cppFunction(int value)
{
String^ message = gcnew String("The value you passed was: " + value);
return message;
}
}
然後在C#側:
private void button1_Click(object sender, RoutedEventArgs e)
{
cppClass cppObj = new cppClass();
string message = cppObj.cppFunction(42);
textBlock1.Text = message;
}
結果:
感謝您的回覆。我編輯了上面的問題。我不想在C#項目中引用cli dll。那麼你提出的soln仍然會工作嗎? – Shashank 2012-07-22 09:29:27
所以你想從C#中調用一個C++函數,但是沒有引用C++ dll,因爲它會導致循環依賴?在這種情況下,您將不得不重新考慮應用程序的設計。如果C++項目被編譯爲一個你手動添加到你的C#項目並使用(我沒有嘗試過)的DLL,你可能能夠解決它,但你應該重新考慮設計或者有一些您的項目之間有更多圖層。 – 2012-07-22 09:52:18