c++ CLI Export void return __declspec(dllexport) 不能应用于具有 __clrcall 调用约定的函数
c++ CLI Export void return __declspec(dllexport) cannot be applied to a function with the __clrcall calling convention
我正在尝试从包装 C# .Net 函数的 C++ Cli 中导出一些 void/functions。
此时我可以正确导出 return 整数值的方法,但是当我尝试导出 Void 时,出现错误:
错误 C3395 'Test2':__declspec(dllexport) 无法应用于具有 __clrcall 调用约定的函数 ClassLibrary1
这是完整代码:
#pragma once
using namespace System;
using namespace System::Reflection;
using namespace RobinHoodLibrary;
namespace ClassLibrary1 {
public ref class Class1
{
// TODO: Add your methods for this class here.
RobinHood^ robin = gcnew RobinHood();
public: int Add(int Number1, int Number2)
{
return robin->Add(Number1, Number2);
}
public: System::Void Test()
{
robin->Test();
}
public: int Test1(int i)
{
return robin->Test1(i);
}
public: System::Void Test2(String^ txt)
{
robin->Test2(txt);
}
};
}
extern __declspec(dllexport) int Add(int Number1, int Number2) {
ClassLibrary1::Class1 c;
return c.Add(Number1, Number2);
}
extern __declspec(dllexport) void Test() {
ClassLibrary1::Class1 c;
c.Test();
return;
}
extern __declspec(dllexport) int Test1(int i) {
ClassLibrary1::Class1 c;
return c.Test1(i);
}
extern __declspec(dllexport) System::Void Test2(String^ txt) {
ClassLibrary1::Class1 c;
c.Test2(txt);
}
我可以轻松导出 Add、Test 和 Test1 方法,但不能导出 Test2。
我该如何解决?
感谢支持
据我所知
您不能导出在参数或 return 值中具有 C++/CLI 类型的方法。
所以你必须使用 const wchar_t* 或 std::wstring 作为参数而不是 String^.
尝试在函数 Test2 中使用 gcroot<>,如下所示:
System::Void Test2(gcroot<String^> txt);
我正在尝试从包装 C# .Net 函数的 C++ Cli 中导出一些 void/functions。
此时我可以正确导出 return 整数值的方法,但是当我尝试导出 Void 时,出现错误:
错误 C3395 'Test2':__declspec(dllexport) 无法应用于具有 __clrcall 调用约定的函数 ClassLibrary1
这是完整代码:
#pragma once
using namespace System;
using namespace System::Reflection;
using namespace RobinHoodLibrary;
namespace ClassLibrary1 {
public ref class Class1
{
// TODO: Add your methods for this class here.
RobinHood^ robin = gcnew RobinHood();
public: int Add(int Number1, int Number2)
{
return robin->Add(Number1, Number2);
}
public: System::Void Test()
{
robin->Test();
}
public: int Test1(int i)
{
return robin->Test1(i);
}
public: System::Void Test2(String^ txt)
{
robin->Test2(txt);
}
};
}
extern __declspec(dllexport) int Add(int Number1, int Number2) {
ClassLibrary1::Class1 c;
return c.Add(Number1, Number2);
}
extern __declspec(dllexport) void Test() {
ClassLibrary1::Class1 c;
c.Test();
return;
}
extern __declspec(dllexport) int Test1(int i) {
ClassLibrary1::Class1 c;
return c.Test1(i);
}
extern __declspec(dllexport) System::Void Test2(String^ txt) {
ClassLibrary1::Class1 c;
c.Test2(txt);
}
我可以轻松导出 Add、Test 和 Test1 方法,但不能导出 Test2。
我该如何解决?
感谢支持
据我所知 您不能导出在参数或 return 值中具有 C++/CLI 类型的方法。 所以你必须使用 const wchar_t* 或 std::wstring 作为参数而不是 String^.
尝试在函数 Test2 中使用 gcroot<>,如下所示:
System::Void Test2(gcroot<String^> txt);