1

現在、メッセージボックスを表示するだけの単純なアンマネージ C++ メソッドがあります。このためのマネージ C++ ラッパーを作成し、C# アプリケーションで参照します。文字列やその他の変数を C# からアンマネージ C++ に渡したり戻したりできるようにする必要がありますが、私の C++ の知識は非常に基本的であるため、文字列の変換に問題があります。

私の最終目標は、新しい c# アプリ (DLLImport または COM を使用しない) を介して、従来のアンマネージ C++ ライブラリから複雑な関数を呼び出せるようにすることですが、先に進む前に簡単な例を作成しようとしています。

前もって感謝します。リッチ

4

1 に答える 1

0

アンマネージ C++ メソッドが次のようなものであると仮定します。

namespace UnmanagedCpp
{
    class MessageBox
    {
    public:
        static void Show(LPCTSTR lpszMessage)
        {
            ::MessageBoxW(NULL, lpszMessage, L"Message", 0);
        }
    };
}

次のようにラップできます。

using namespace System::Runtime::InteropServices;

namespace ManagedCpp
{
    public ref class MessageBox
    {
    public:
        static void Show(String^ message)
        {
#if defined(UNICODE) || defined(_UNICODE)
            IntPtr intPtr = Marshal::StringToHGlobalUni(message);
#else
            IntPtr intPtr = Marshal::StringToHGlobalAnsi(message);
#endif

            UnmanagedCpp::MessageBox::Show(static_cast<LPTSTR>(intPtr.ToPointer()));
            Marshal::FreeHGlobal(intPtr);
        }
    };
}

C# と C++ の間でより広範な相互運用を行うことを計画している場合は、COM をお勧めします。これは、ラッパー (より複雑なシナリオでは非常に面倒です) を作成する必要がないためです。 C++ コード。

于 2013-02-08T14:13:59.357 に答える