简体   繁体   中英

Python 3: import dll with ctypes or numpy.ctypeslib

I want to work with the APIs of the program of structural analysis (civil engineering) Autodesk Robot Structural Analysis . With IronPython I initialize the variables as follows:

import clr
clr.AddReferenceToFileAndPath(‘mypfad\Interop.RobotOM.dll’)
from RobotOM import *
robapp = RobotApplicationClass()
robproj = robapp.Project
robstruct = robproj.Structure

With robstruct I can call the API functions and continue working.

Now I'd like to do the same with Python 3 . I have tried with ctypes and with numpy.ctypeslib without success:

import ctypes
lib_ctypes = ctypes.cdll[‘mypfad\Interop.RobotOM.dll']
print(lib_ctypes)
<CDLL 'mypfad \Interop.RobotOM.dll', handle 1a1ff900000 at 0x1a1e8e22710>

import numpy
lib_numpy = numpy.ctypeslib.load_library('Interop.RobotOM.dll', 'mypfad’)
print(lib_ numpy)
<CDLL 'mypfad\Interop.RobotOM.dll', handle 1a1ffb40000 at 0x1a1ffb194e0>

And I don't how to continue.

My questions are: is this the right way and how shall I continue?

Edited 05.10.2018

Original code with IronPython :

import clr

# Add Robot Structural Analysis API reference
clr.AddReferenceToFileAndPath(
    'C:\Program Files\Common Files\Autodesk Shared\Extensions 2018\Framework\Interop\Interop.RobotOM.dll'
)

# Add needed import to be able to use Robot Structural Analysis objects
from RobotOM import *

# Connect to the running instance of Robot Structural Analysis
robapp = RobotApplicationClass()

# Get a reference of the current project
robproj = robapp.Project

# Get a reference of the current model
robstruct = robproj.Structure

An attempt according to the comment of The Machine :

import ctypes

my_dll = ctypes.cdll.LoadLibrary(
    'C:\Program Files\Common Files\Autodesk Shared\Extensions 2018\Framework\Interop\Interop.RobotOM.dll'
)

robapp = my_dll.RobotApplicationClass()
robproj = robapp.Project
robstruct = robproj.Structure

Result:

AttributeError: function 'RobotApplicationClass' not found

Edited 16.10.2018

Third attempt:

from ctypes import cdll
my_dll = cdll.LoadLibrary(
    'C:\Program Files\Common Files\Autodesk Shared\Extensions 2019\Framework\Interop\Interop.RobotOM.dll'
)
my_dll.RobotApplicationClass()

Result:

AttributeError: function 'RobotApplicationClass' not found

Try this:

from ctypes import*
your_dll = cdll.LoadLibrary(‘mypfad\Interop.RobotOM.dll ')

If it is succesfully loaded than you can aces to all of classes and function in that dll file . You can call theme with your_dll.nameofclass .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM