Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++代码。该代码包含Windows mobile GPS启用/禁用功能。我想从C代码中调用这个方法,这意味着当用户点击按钮时,C代码应该调用C++代码。 这是启用GPS功能的C++代码: #include "cppdll.h" void Adder::add() { // TODO: Add your control notification handler code here HANDLE hDrv = CreateFile(TEXT("FNC1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (0 == DeviceIoControl(hDrv, IOCTL_WID_GPS_ON, NULL, 0, NULL, 0, NULL, NULL)) { RETAILMSG(1, (L"IOCTL_WID_RFID_ON Failed !! \r\n")); return; } CloseHandle(hDrv); return (x+y); }_C#_C++_Windows Mobile_C++ Cli - Fatal编程技术网

C# 我怎样才能呼叫C++;来自C的函数# 我有C++代码。该代码包含Windows mobile GPS启用/禁用功能。我想从C代码中调用这个方法,这意味着当用户点击按钮时,C代码应该调用C++代码。 这是启用GPS功能的C++代码: #include "cppdll.h" void Adder::add() { // TODO: Add your control notification handler code here HANDLE hDrv = CreateFile(TEXT("FNC1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (0 == DeviceIoControl(hDrv, IOCTL_WID_GPS_ON, NULL, 0, NULL, 0, NULL, NULL)) { RETAILMSG(1, (L"IOCTL_WID_RFID_ON Failed !! \r\n")); return; } CloseHandle(hDrv); return (x+y); }

C# 我怎样才能呼叫C++;来自C的函数# 我有C++代码。该代码包含Windows mobile GPS启用/禁用功能。我想从C代码中调用这个方法,这意味着当用户点击按钮时,C代码应该调用C++代码。 这是启用GPS功能的C++代码: #include "cppdll.h" void Adder::add() { // TODO: Add your control notification handler code here HANDLE hDrv = CreateFile(TEXT("FNC1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (0 == DeviceIoControl(hDrv, IOCTL_WID_GPS_ON, NULL, 0, NULL, 0, NULL, NULL)) { RETAILMSG(1, (L"IOCTL_WID_RFID_ON Failed !! \r\n")); return; } CloseHandle(hDrv); return (x+y); },c#,c++,windows-mobile,c++-cli,C#,C++,Windows Mobile,C++ Cli,这是头文件cppdll.h: class __declspec(dllexport) Adder { public: Adder(){;}; ~Adder(){;}; void add(); }; 如何使用C#调用该函数 请问,有谁能帮我解决这个问题吗?我给你举个例子 您应该声明您的C++函数以类似的方式导出(假设最近的MSVC编译器): < >编译你的C++项目作为DLL库。将项目目标扩展名设置为.dll,将配置类型设置为动态库(.dll) 然后,在C#中声明: 你可以调

这是头文件
cppdll.h

class __declspec(dllexport) Adder
{
  public:
   Adder(){;};
  ~Adder(){;};
 void add();
};

如何使用C#调用该函数


请问,有谁能帮我解决这个问题吗?

我给你举个例子

您应该声明您的C++函数以类似的方式导出(假设最近的MSVC编译器):

< >编译你的C++项目作为DLL库。将项目目标扩展名设置为.dll,将配置类型设置为动态库(.dll)

然后,在C#中声明:


<>你可以调用你的C++测试函数,正如你所期望的那样。请注意,一旦您想要传递字符串、数组、指针等,它可能会变得有点棘手。例如,请参阅SO问题。

我仍然会这样做:#定义导出"declspec(dllexport)@Quandary sure,不管你的船漂浮在哪里。我喜欢显式地指定调用约定,所以我需要一个更高级的宏来获取类型参数,我通常会尽量避免使用更高级的宏,因为它们是,我相信您知道-邪恶。感谢您的回复。我编辑了代码。这会导致错误。我还更改了配置。请帮帮我<代码>\gpscpptodell.cpp(2):警告C4627:“#包括“gpscpptodell.h”:在查找预编译头时跳过。请使用1>将指令添加到“stdafx.h”或重建预编译头1>\gpscpptodell.cpp(15):致命错误C1010:查找预编译头时出现意外的文件结尾。您是否忘记将“#include“stdafx.h”添加到源代码中?看起来您在创建项目时选择了使用预编译头,然后忘记将其包含在一个.cpp文件中。您可以在gpscpptodell.cpp文件中添加一个#include stdafx.h(在最顶部)。您能看一下这个问题吗
extern "C"             //No name mangling
__declspec(dllexport)  //Tells the compiler to export the function
int                    //Function return type     
__cdecl                //Specifies calling convention, cdelc is default, 
                       //so this can be omitted 
test(int number){
    return number + 1;
}
public static class NativeTest
{
    private const string DllFilePath = @"c:\pathto\mydllfile.dll";

    [DllImport(DllFilePath , CallingConvention = CallingConvention.Cdecl)]
    private extern static int test(int number);

    public static int Test(int number)
    {
        return test(number);
    }
}