簡體   English   中英

找不到PInvoke DLL-錯誤?

[英]Can't find PInvoke DLL - BUG?

我有Windows mobile GPS第三方應用程序。這是C ++代碼,其中包含GPS自動啟用/禁用功能。

我要制作dll。 我也是。 當用戶單擊發票(C#代碼)時,必須找到GPS(C ++)。

這是我的源代碼GPS.cpp

      extern "C"      //No name mangling
      __declspec(dllexport) 
      #include "GPS.h"

      #include "stdafx.h"
      #include "RF PWR.h"
      #include "RF PWRDlg.h"
      #include "widioctl.h"

     #ifdef _DEBUG
     #define new DEBUG_NEW
     #endif

      void CaptureGPS()
     {
    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);
}

這是GPS.h

class Adder
 {
    public:
       Adder(){;};
       ~Adder(){;};
       void CaptureGPS();
 };

這是我的資料來源: http : //pastie.org/3436376

它說can't find entry point CaptureGPS in PInvoke RF PWF.dll

請有人幫我解決這個問題。

有什么問題...

讓我先解釋一下,你寫了什么

extern "C"      //No name mangling
__declspec(dllexport) 
#include "GPS.h"

預處理后將擴展為

extern "C"      //No name mangling
__declspec(dllexport) 
class Adder
{
    public:
       Adder(){;};
       ~Adder(){;};
       void CaptureGPS();
};

這意味着您是:

  • 嘗試使class Adder C樣式的結構(並且由於class Adder不是POD而無法實現時,僅忽略了extern "C"

  • 嘗試導出class Adder的變量,如果該變量將在class定義之后定義,例如:

     extern "C" //No name mangling __declspec(dllexport) class Adder { public: Adder(){;}; ~Adder(){;}; void CaptureGPS(); } variable; 

    但這沒有定義任何variable ,因此__declspec(dllexport)只是被忽略。

請注意,您在class Adder聲明了一些方法,但未定義它們。 可以,雖然您不嘗試使用class Adder 還要注意,您的void CaptureGPS()void Adder::CaptureGPS()沒有任何關系,它只是一個單獨的函數

我認為,你應該做

看來,您只想導出void CaptureGPS();

如果是這樣,則應將其添加到頭文件中:

extern "C" __declspec(dllexport) void CaptureGPS();

然后, CaptureGPS()將被導出,您將能夠使用pinvoke對其進行調用

MSDN上有一篇文章,內容涉及為P / Invoke編寫DLL函數以及通過dumpbin檢查導出的名稱。 它是專門為Compact Framework編寫的,因此它與您的工作非常相關。

也就是說,為什么仍要為此創建一個DLL? 為什么不直接從C#應用程序P /調用CreateFile,DeviceIoControl和CloseHandle? MSDN上還有另一篇文章,內容涵蓋了Compact Framework中托管代碼的流接口驅動程序的使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM