2013-03-11 22 views
5

tôi đấu tranh để tạo dll trong VB mà sẽ được hiển thị cho trăn,VB việc dll doesnt trong python với ctypes (chức năng * không tìm thấy)

không ai trong số các chức năng VB có thể nhìn thấy khi tôi nhập khẩu dll vào python

Dưới đây là những gì tôi làm:

  1. đơn giản nhất bao giờ VB lớp
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. tôi lưu nó như một dll (Xây dựng từ Visual Studio 2010)

  2. tôi cố gắng nếu nó hoạt động bằng cách nhập nó vào dự án VB othoer (nó hoạt động tốt) :

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. tôi tải nó vào python và cố gắng sử dụng nó:
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 

thay vì MyDll.MyFunctions tôi cũng đã cố gắng: MyDll.MyFunctions() , MyDll.MyFunctions.AddMyValues(1,2) , MyDll.MyFunctions.AddMyValues.

Có gì sai ở đây? Tôi không hiểu.

PS. có vấn đề tương tự chưa được giải quyết: calling vb dll in python

+0

PS. Khi tôi đăng ký dll nó như là một COM nó hoạt động tốt –

+0

Có lẽ những bài viết này sẽ giúp: [Làm thế nào để tự động xuất khẩu chức năng .NET để chương trình không quản lý] (http://www.codeproject.com/Articles/16310/How-to-Automate -Exporting-NET-Function-to-Unmanage) và [Unmanaged code có thể bọc các phương thức quản lý] (http://www.codeproject.com/Articles/8124/Unmanaged-code-can-wrap-managed-methods). – eryksun

Trả lời

0

Sử dụng dumpbin.exe trên dll của bạn, với /exports hoặc tùy chọn /linkermember để xem tên thực tế được xuất trong DLL là gì.

5

Bạn không thể thực hiện việc này. DLL bạn đang tạo ra là một hội đồng .NET, hoặc, nếu bạn trưng ra một giao diện COM, đó là một thành phần COM.

Mô-đuncủa Python chỉ hỗ trợ C ABI DLLs.

+0

aaaah:/Vì vậy, có cách nào tôi có thể sử dụng dll vb trong python? Aprat từ COM, có vẻ không mạnh mẽ (đăng ký tên, một dll mỗi tên, cập nhật cứng, v.v.) –

+0

@ Intelligent-Infrastructure Có thể có một ràng buộc .NET cho Python nhưng tôi thực sự nghi ngờ nó - COM có vẻ là cách duy nhất. –