2013-03-11 8 views
5

walczę stworzyć dll w VB, który będzie widoczny dla Pythona,VB praca dll robi w Pythonie z ctypes (funkcja * nie znaleziono)

żadna z funkcji VB są widoczne, kiedy import dll do pytona

Oto, co zrobić:

  1. najprostszy kiedykolwiek klasa 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` 
  1. zapisać go jako DLL (Build z Visual Studio 2010)

  2. Staram czy działa importując go do othoer projektu VB (działa poprawnie) :

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. załadować go do pytona i spróbować go użyć:
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 

zamiast MyDll.MyFunctions Próbowałem również: MyDll.MyFunctions() , MyDll.MyFunctions.AddMyValues(1,2) , MyDll.MyFunctions.AddMyValues.

Co jest nie tak? Nie rozumiem tego.

PS. Podobny problem jest nierozwiązany: calling vb dll in python

+0

PS. Kiedy rejestruję go jako COM, to działa dobrze –

+0

Może te artykuły pomogą: [Jak zautomatyzować eksportowanie funkcji .NET do niezarządzanych programów] (http://www.codeproject.com/Articles/16310/How-to-Automate -Exporting-NET-Function-to-Unmanage) i [Unmanaged code może owijać zarządzane metody] (http://www.codeproject.com/Articles/8124/Unmanaged-code-can-wrap-managed-metods). – eryksun

Odpowiedz

0

Zastosowanie dumpbin.exe na dll, z /exports czy może wybrać opcję /linkermember aby zobaczyć, co rzeczywiste nazwy eksportowanych w DLL są.

5

Nie możesz tego zrobić. Biblioteka DLL, którą tworzysz, jest zespołem .NET lub, jeśli ujawniasz interfejs COM, jest to komponent COM.

Moduł Pythona ctypes obsługuje tylko C ABI DLLs.

+0

aaaah:/Czy istnieje sposób, w jaki mogę używać dll vb w python? Aprat z COM, który wydaje się niezbyt mocny (rejestracja nazwy, jedna dll na nazwę, twarde aktualizacje itp.) –

+0

@ Inteligentna infrastruktura Może istnieć powiązanie .NET dla Pythona, ale ja w to wątpię - wygląda na COM być jedyną drogą. –

Powiązane problemy