none
請問C#專案如何呼叫C寫的dll? RRS feed

  • 問題

  •  

    hi 各位達人好

     

    今嘗試用Dllimport方式,

    [DllImport("***.dll")]
            public static extern long Ar(string server, long a, string b, string c, string d, string e, long f, long g, long h, long i, long j, string k);

     

    然後這樣用,

    long dsf = Ar("we", 7, "ew", "j", "j", "j", 6, 1, 1, 1, 1, "20080505");

     

    程式可以編譯,但發生錯誤

    在 DLL '***.dll' 中找不到名稱為 'Ar' 的進入點。

     

    請問

    1. 關於.h檔,要怎樣用??

    2. 關於 .lib檔,要如何引?

    3. 上列錯誤表示什麼??

     

    請各位達人解惑,謝謝您!! 感謝!!

     

    2008年2月18日 上午 08:11

解答

所有回覆

  • C# 只認二進位可執行檔,也就是 DLL 檔,.h 和 .lib 是無法使用。

     

    上列錯誤是表示 C# 無法在你給定的 DLL 檔中找到該函式的進入點,可能是函式名稱錯誤。

    2008年2月18日 上午 09:12
    版主
  • 感謝 小朱快速回應!!

     

    下午摸索了,索性將 dll 放到system32,發現在專案加入參考時,點選com頁籤時,可以加入,

    程式中就以一般物件使用,這樣可以,只是不知道原理,可以解釋一下嗎??

     

    謝謝!!

    2008年2月18日 上午 10:19
  • 現在講的DLL 分三種
    1. .net 寫的dll
    2. 用com技術的dll
    3. 傳統的dll

    當你是第三種的dll時,才是用 import 的方式
    所以你大概是用錯了,你這個dll 是第二種。
    2008年2月18日 上午 10:42
  • 那表示你的 DLL 是符合 COM Automation 規格的。

    2008年2月18日 上午 10:43
    版主
  • 各位好:
    不好意思,想請問一下在C:\WINDOWS\system32\wmp.dll,
    以上這個dll是屬於哪一種類型的DLL?
    請多指教,謝謝。

    Thanks for any message.
    Josh
    2008年3月6日 下午 02:14
  • hi 各位達人好

     

    今嘗試用Dllimport方式,

    [DllImport("***.dll")]
            public static extern long Ar(string server, long a, string b, string c, string d, string e, long f, long g, long h, long i, long j, string k);

     

    然後這樣用,

    long dsf = Ar("we", 7, "ew", "j", "j", "j", 6, 1, 1, 1, 1, "20080505");

     

    程式可以編譯,但發生錯誤

    在 DLL '***.dll' 中找不到名稱為 'Ar' 的進入點。

     

    請問

    1. 關於.h檔,要怎樣用??

    2. 關於 .lib檔,要如何引?

    3. 上列錯誤表示什麼??

     

    請各位達人解惑,謝謝您!! 感謝!!

     

     

    上面的代码中[DllImport("***.dll")]改为[DllImport("***.dll",EntryPoint ="Ar") ]就可以了不得

    2008年3月7日 上午 08:53