Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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的dll函数# 我试图在一个DLL中调用C++语言到C++函数。此函数的一个参数是指向短类型变量的指针_C#_C++_Dll - Fatal编程技术网

C# 返回调用C++;来自C的dll函数# 我试图在一个DLL中调用C++语言到C++函数。此函数的一个参数是指向短类型变量的指针

C# 返回调用C++;来自C的dll函数# 我试图在一个DLL中调用C++语言到C++函数。此函数的一个参数是指向短类型变量的指针,c#,c++,dll,C#,C++,Dll,我没有做任何花哨的数据结构,或未知大小的变量。只是一个简单的短值 当DLL C++函数试图修改这个变量的值时,它给出了一个“非托管异常0xC000 00:访问冲突”。 我不能修改DLL源代码(它在其他项目中使用,我不能触摸它,尽管我有调试它的源代码) < > > C++的DLL函数的代码< /强>(请注意“/ /该行引发异常”代码中的注释行)< /P> //声明 虚拟测试函数(short u RPC_FAR*sRet)=0; //定义 STDMETHODIMP CABTest::TestFunc

我没有做任何花哨的数据结构,或未知大小的变量。只是一个简单的短值

当DLL C++函数试图修改这个变量的值时,它给出了一个“非托管异常0xC000 00:访问冲突”。 我不能修改DLL源代码(它在其他项目中使用,我不能触摸它,尽管我有调试它的源代码)

< > > C++的DLL函数的代码< /强>(请注意“/ /该行引发异常”代码中的注释行)< /P>
//声明
虚拟测试函数(short u RPC_FAR*sRet)=0;
//定义
STDMETHODIMP CABTest::TestFunction(short*sReturnValue)
{
//一些
//计算
//这里
*sReturnValue=1;//此行提供异常
返回0;
}
调用DLL的C#代码

[DllImport("test.dll", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
static extern short TestFunction(ref short sReturn);

short sMyValue = 0;
TestFunction(ref sMyValue);
我希望sMyValue的值为1,因为我传递的引用是一个直短类型(不是一个奇特的数据结构),但我只得到一个应用程序崩溃(上面的例外)

我可以在C代码中做些什么来避免这个问题?我所看到的所有类似问题都需要重写C++函数(改变“短*sRealValk”,但不能触摸原始DLL源代码。


我想我会编写一个wrapper.dll来调用test.dll,但我想知道是否有直接和更快的解决方案。

我按照@PaulMcKenzie的建议创建了一个实例,它工作正常。 我错误地认为我可以抓取DLL并使用所需的计算函数,但我想我不能。
把这个答案留给可能犯同样错误的其他人。

你确定
CABTest::TestFunction(short*)
是一个静态成员函数吗?我们可以看到函数的声明吗?(the
.h
)可能的副本:“RoBrand and ZeZuk当然不是。”代码> *SurTurValue<代码>的价值是什么?这不是写共享内存的问题吗?@ ptoMeOxII。您所发布的C++代码不添加IMO。您有一个虚拟函数,它要求一个实例:<代码> CABTest< /Cord>,但是没有提到创建<代码> CABTEST 测试函数< /COD>是简单的<代码> C <代码>导出的“自由”函数,但它不是。我同意这个问题是不完整的。