Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C+;访问指针参数值+;C语言中的动态链接库# 我有这个C++ DLL,具有以下功能: extern "C" INT16 WINAPI SetWatchElements(INT16 *WatchElements) { INT16 Counter; //some code for (Counter = 0; Counter < WATCHSIZE; Counter++) WatchElements[Counter] = MAPINT(WatchData[Counter]); //some code return ReturnValue; }_C#_C++_Dll_Dllimport - Fatal编程技术网

C# 从C+;访问指针参数值+;C语言中的动态链接库# 我有这个C++ DLL,具有以下功能: extern "C" INT16 WINAPI SetWatchElements(INT16 *WatchElements) { INT16 Counter; //some code for (Counter = 0; Counter < WATCHSIZE; Counter++) WatchElements[Counter] = MAPINT(WatchData[Counter]); //some code return ReturnValue; }

C# 从C+;访问指针参数值+;C语言中的动态链接库# 我有这个C++ DLL,具有以下功能: extern "C" INT16 WINAPI SetWatchElements(INT16 *WatchElements) { INT16 Counter; //some code for (Counter = 0; Counter < WATCHSIZE; Counter++) WatchElements[Counter] = MAPINT(WatchData[Counter]); //some code return ReturnValue; },c#,c++,dll,dllimport,C#,C++,Dll,Dllimport,我如何称呼它: Int16 someData = 0; var result = SetWatchElements(ref someData); 这可以很好地编译,并且我的变量someData实际上有一个正确的值。问题在于,因为在C++世界中,这些值被设置为超出单个值的范围,所以我不确定如何在C.*中访问。p> 我试过这样做: Int16[] someData = new Int16[80]; var result = SetWatchElements(ref someData[0]); 但

我如何称呼它:

Int16 someData = 0;
var result = SetWatchElements(ref someData);
这可以很好地编译,并且我的变量
someData
实际上有一个正确的值。问题在于,因为在C++世界中,这些值被设置为超出单个值的范围,所以我不确定如何在C.*中访问。p> 我试过这样做:

Int16[] someData = new Int16[80];
var result = SetWatchElements(ref someData[0]);
但结果是一样的


PS:我不能在这里使用不安全,因为这违反了我们的标准。

尝试将导入的函数声明为:

[DLLImport("MyDll.dll")]
private static extern int SetWatchElements(Int16[] watchElements);
不带
ref
调用它:

Int16[] someData = new Int16[80];
var result = SetWatchElements(someData);

SetWatchElements(参考someData[0])就应该算是正常的。。。。你有证据表明它失败了吗?我在控制台窗口中显示了所有的值,一些数据[0]中有一个值,但所有其他索引都是0。这项工作正常,但没有成功。我有一个窗体应用程序和一个控制台应用程序,它们都使用相同的dll。这对控制台应用程序有效,但窗体应用程序返回dll的错误响应代码。我在表单文件中定义了dll函数定义。你知道是否有任何原因会导致不同的行为吗?@Josh确保两个应用程序具有相同的目标平台(x86,x64)。我知道,它们都是(x86)。表单应用程序命中或未命中。函数调用有时通过,有时不通过。我曾尝试将这些方法放在后台线程中,但结果相同。C++ DLL用于与串行接口通信,所以我不知道是否存在与串行接口或什么样的同步。
Int16[] someData = new Int16[80];
var result = SetWatchElements(someData);