2013-03-11 10 views
5

Ich kämpfe schon in VB zu schaffen, die für Python zu sehen sein wird,VB DLL nicht funktioniert in Python mit ctypes (Funktion * nicht gefunden)

keiner von VB-Funktionen sichtbar sind, wenn ich schon in Python importieren

Hier ist, was ich tue:

  1. Simplest je VB Klasse
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. ich es als DLL (Build von Visual Studio 2010)

  2. speichere ich versuchen, wenn es durch den Import es in othoer VB-Projekt arbeitet (es funktioniert) :

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 
  • ich es in python laden
      und versuchen, es zu benutzen:
    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 
    

    statt MyDll.MyFunctions i auch versucht: MyDll.MyFunctions() , MyDll.MyFunctions.AddMyValues(1,2) , MyDll.MyFunctions.AddMyValues.

    Was ist hier falsch? Ich verstehe es nicht.

    PS. es ist ähnlich ungelöstes Problem: calling vb dll in python

  • +0

    PS. Wenn ich dll es als eine COM registriere es ist in Ordnung –

    +0

    Vielleicht helfen diese Artikel: [Wie Export von .NET-Funktion zu nicht verwalteten Programmen zu automatisieren] (http://www.codeproject.com/Articles/16310/How-to-Automate -Exportieren-NET-Function-to-Unmanage) und [Unmanaged Code kann verwaltete Methoden umhüllen] (http://www.codeproject.com/Articles/8124/Unmanaged-code-can-wrap-managed-methods). – eryksun

    Antwort

    0

    Verwenden dumpbin.exe auf dll, mit der /exports oder vielleicht die /linkermember Option, um zu sehen, was die tatsächlichen exportierten Namen in der DLL sind.

    5

    Sie können dies nicht tun. Die DLL, die Sie erstellen, ist eine .NET-Assembly oder, wenn Sie eine COM-Schnittstelle verfügbar machen, handelt es sich um eine COM-Komponente.

    Python ctypes Modul unterstützt nur C ABI DLLs.

    +0

    aaaah:/Gibt es eine Möglichkeit, wie ich vb DLLs in Python verwenden kann? Aprat von COM, die nicht so robust (Registrierung Name, eine DLL pro Name, harte Updates, etc. etc.) es zu sein scheint –

    +0

    @ Intelligent-Infrastruktur Es kann eine .NET-Bindung für Python, aber ich bezweifle, tatsächlich - COM scheint um der einzige Weg zu sein. –

    Verwandte Themen