私はC#からいくつかのC++メソッドを呼び出す小さな相互運用アプリケーションを試しています。私はメソッドを呼び出して整数を返すための非常に基本的な例を用意しています。これはうまくいきます。C++配列をC#に返す
InteropApp.h
#ifdef DLLFUNCTIONEXPOSETEST_EXPORTS
#define DLLFUNCTIONEXPOSETEST_API __declspec(dllexport)
#else
#define DLLFUNCTIONEXPOSETEST_API __declspec(dllimport)
#endif
extern "C" DLLFUNCTIONEXPOSETEST_API int fnSumofTwoDigits(int a, int b);
InteropApp.cpp
#include "stdafx.h"
#include "DLLFunctionExposeTest.h"
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
DLLFUNCTIONEXPOSETEST_API int fnSumofTwoDigits(int a, int b)
{
return a + b;
}
C#ABでInteropAppTest
static class TestImport
{
[DllImport("DLLFunctionExposeTest.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "fnSumofTwoDigits")]
public static extern int fnSumofTwoDigits(int a, int b);
}
public partial class MainWindow : Window
{
public MainWindow()
{
try
{
InitializeComponent();
int g = TestImport.fnSumofTwoDigits(2, 1);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
C++アプリケーションの場合、strings
の配列を返すメソッドと、integers
の配列を返す別のメソッドが必要です。しかし、同じことをするために私が読んだように、これがマーシャルを伴うのであれば混乱しますか?メソッドのプロトタイプはC++とC#の両方のように見えますか? C#アプリケーションでC++配列を返す関数を呼び出すために何が変更されるのでしょうか?
私は何か簡単な例を見つけることができなかったので、上のことのための簡単な例を得ることは素晴らしいことです。
何を試しましたか?どのようなタイプが正確に意味していますか? 'std :: string'(または' char * '?)と' int'ですか?それとも問題じゃない? – svick
@svick:メソッドを返す 'char *'と 'int'配列から始めたいと思います。 – Cipher