2013-03-11 30 views
5

我努力創造VB DLL這將是蟒蛇可見,VB DLL不工作與ctypes的(功能*未找到)

沒有一個VB功能是可見的,當我輸入DLL到蟒蛇

這是我做的:

  1. 有史以來最簡單的VB類
Public Class MyFunctions 
     Public Function AddMyValues(ByVal Value1 As Double, ByVal Value2 As Double) 
      Dim Result As Double 
      Result = Value1 + Value2 
      Return Result 
     End Function 
    End Class` 
  • 我將它保存爲一個dll

  • (從Visual Studio 2010中生成)我試試,如果它的工作原理是將它導入到othoer VB項目(正常工作) :

  • Imports ClassLibrary1 
    Module Module1 
    
        Sub Main() 
         Dim Nowa As New ClassLibrary1.MyFunctions 
    
         Dim Result As String 
         Result = Nowa.AddMyValues(123, 456.78).ToString 
         Console.WriteLine(Result) 
         Console.ReadLine() 
        End Sub 
    
    End Module 
    
  • 我將其加載到蟒,並嘗試使用它:
  • from ctypes import * 
    MojaDLL = cdll.LoadLibrary("E:\\ClassLibrary1.dll") 
    MojaDLL.MyFunctions 
    Traceback (most recent call last): 
        File "<console>", line 1, in <module> 
        File "C:\Python25\lib\ctypes\__init__.py", line 361, in __getattr__ 
        func = self.__getitem__(name) 
        File "C:\Python25\lib\ctypes\__init__.py", line 366, in __getitem__ 
        func = self._FuncPtr((name_or_ordinal, self)) 
    AttributeError: function 'MyFunctions' not found 
    

    代替MyDll.MyFunctions我也嘗試:MyDll.MyFunctions() , MyDll.MyFunctions.AddMyValues(1,2) , MyDll.MyFunctions.AddMyValues

    這裏有什麼問題?我不明白。

    PS。還有類似的未解決的問題:calling vb dll in python

    +0

    PS。當我註冊DLL作爲COM它工作很好 – 2013-03-11 18:58:17

    +0

    也許這些文章將有所幫助:[如何自動導出.NET功能到非託管程序](http://www.codeproject.com/Articles/16310/How-to-Automate -Exporting-NET-Function-to-Unmanage)和[非託管代碼可以包裝託管方法](http://www.codeproject.com/Articles/8124/Unmanaged-code-can-wrap-managed-methods)。 – eryksun 2013-03-12 04:52:29

    回答

    0

    使用dumpbin.exe你的DLL,用/exports或者也許/linkermember選項,看看有什麼DLL中的實際導出名稱。

    5

    你不能這樣做。你正在生成的DLL是一個.NET程序集,或者如果你公開一個COM接口,它就是一個COM組件。

    Python的​​模塊僅支持C ABI DLLs。附件1:

    +0

    aaaah:/有沒有什麼辦法可以使用vb dll的python?來自COM的Aprat,這似乎不是很強大(註冊名稱,每個名稱的一個DLL,硬更新等等) – 2013-03-25 09:45:50

    +0

    @智能基礎設施可能有一個.NET的Python綁定,但我真的懷疑它 - COM似乎是唯一的方法。 – 2013-03-25 10:06:22