C# 如何将双精度值传递给C++;使用DLLImport的参数? 我有一个C++方法,它采用一个双参数类型,例如 extern "C" { __declspec(dllexport) void __cdecl GetResult (double resultLine); }
在C#端,我可以调用该方法,但它总是将resultLine值转换为0。我用dLimPurt的外部特性调用C++ DLL方法:C# 如何将双精度值传递给C++;使用DLLImport的参数? 我有一个C++方法,它采用一个双参数类型,例如 extern "C" { __declspec(dllexport) void __cdecl GetResult (double resultLine); },c#,visual-c++,C#,Visual C++,在C#端,我可以调用该方法,但它总是将resultLine值转换为0。我用dLimPurt的外部特性调用C++ DLL方法: internal static class UnsafeNativeMethods { const string _dllLocation = "CoreDLL.dll"; [DllImport(_dllLocation)] public static extern void GetResult(double resultLine); } 我可以调用其他接受字符串值的方
internal static class UnsafeNativeMethods
{
const string _dllLocation = "CoreDLL.dll";
[DllImport(_dllLocation)]
public static extern void GetResult(double resultLine);
}
我可以调用其他接受字符串值的方法,但由于某些原因,当我传递双精度值时,它不起作用
这是传递双精度值的正确方法吗?或者我需要使用ref/out等吗?您的呼叫约定不匹配,一侧是cdecl,另一侧是stdcall。使它们匹配,你应该重新开始工作。你的通话约定不匹配,一边是cdecl,另一边是stdcall。让他们匹配,你就应该重新开始工作。我不能100%确定这是否相关,但我在这里看到的一个根本错误是,你把呼叫约定搞错了。如果不指定任何内容,
DllImport
属性将使用Winapi
调用约定,这实际上是\uu stdcall
,而您需要\uu cdecl
要解决此问题,请将字段设置为:
<>或将C++约定的调用约定设置为“代码>ysSTDCALL//CODE”(如果您不需要VARARG <代码>,Y.STDCALL/<代码>也比
DllImport
属性将使用Winapi
调用约定,这实际上是\uu stdcall
,而您需要\uu cdecl
要解决此问题,请将字段设置为:
<>或将调用约定设置为C++(C++)上的代码>(a)sddLea/Cuff>(如果不需要VARARG <代码>,ysSTDLCAE/
internal static class UnsafeNativeMethods
{
const string _dllLocation = "CoreDLL.dll";
[DllImport(_dllLocation), CallingConvention=CallingConvention.Cdecl]
public static extern void GetResult(double resultLine);
}