VB DLL无法在python中使用ctypes(函数*未找到)

时间:2013-03-11 18:44:42

标签: python vb.net dll ctypes

我很难在VB中创建dll,这对于python来说是可见的,

将dll导入python

时,没有任何VB函数可见

这就是我的所作所为:

  1. 最简单的VB类
  2. 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`
    
    1. 我将其另存为dll(从Visual Studio 2010构建)

    2. 我尝试通过将其导入到其他VB项目中来工作(它工作正常):

    3.     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
      
      1. 我将它加载到python并尝试使用它:
      2. 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

2 个答案:

答案 0 :(得分:5)

你不能这样做。您正在生成的DLL是.NET程序集,或者,如果您公开COM接口,它是一个COM组件。

Python的ctypes模块仅支持C ABI DLLs

答案 1 :(得分:0)

在您的dll上使用dumpbin.exe,使用/exports/linkermember选项查看DLL中实际导出的名称是什么。