2010-01-06 45 views
1

我有一個使用C#前端和一個C++ DLL作爲後端的應用程序。我試圖將C#代碼中的數組傳遞給DLL中的C++代碼,該代碼更改了該數組中的值。但是,當我試圖在C++ DLL函數調用後從C#代碼中檢索數組的值時,這些更改沒有被反映出來。我想要反映這些變化。在這方面請幫助我。更改不反映在C#代碼和C++代碼之間傳遞的變量值

謝謝, Rakesh。


以下是我正在使用的函數的簽名。

在C#:

testStruct(structs, len); 

結構是結構的,我傳遞數組。

在C++:

extern "C" __declspec(dllexport) void __cdecl testStruct(structure1* arrStruct, int len) 

arrStruct是結構的,其接收從C#傳遞的那些陣列。

+0

請張貼正在使用的簽名(或查看[pinvoke](http://www.pinvoke.net/)) – 2010-01-06 08:26:21

回答

0

數組正在編組的值爲到C++ DLL,這意味着您的C++ DLL正在處理原始數組的副本。該數組需要編號引用爲了讓您的C++代碼來操縱您的C#代碼所指的同一個數組。

與其調查通過引用來調用數組的方法,您可能需要考慮更改C++接口,以便將被操作的數組返回到C#代碼,例如返回值。

1

在您的本地代碼:

void fill(int* buffer, size_t length) 
{ 
    for (int i = 0; i < length; ++i) 
    buffer[i] = i; 
} 

在C#代碼:

[DllImport("Foo")] 
static void fill([Out] int[] buffer, UIntPtr length); 

OutAttribute Class reference

如果您的本地方法在修改內容之前首先訪問內容,您也可以使用[In, Out]