Greg, THANKS!!! That was a big help. I searched all over but could not find any information that I could understand that addressed this. I guess I didn't know what to look for. Thank you for taking the time to write this up.
On Thu, Dec 2, 2010 at 12:07 PM, Greg Antal <greg.an...@ata-e.com> wrote: > Jim: > > The thing about the Femap API is that its class methods use tons of ByRef > arguments to return data to the caller. This is not something Python really > supports. PythonCOM gets around it by turning the output arguments in to > return values, but I find that only works if I enforce early binding. Here's > what I recommend: > > Run makepy on the "femap.tlb" and have it save the output to a file. I > always call that file PyFemap.py. > In your Python code, import this file along with all your other import > statements: import PyFemap. If you look in PyFemap.py, you'll see that it > imports all the win32com stuff it needs, so you don't have to do that > yourself. Also, all the Femap stuff is now accessible by "early binding", > and that is essential when dealing with those pesky return values. > Access the femap model object like this: zFemap = PyFemap.model() > Get the active view ID like this: iRet, iViewId = > zFemap.feAppGetActiveView() > > Item 4 shows how an output argument in VB or C++ becomes a return value in > Python. That happens with every method in the API that uses output > arguments. The standard return code is always first in the list, followed by > the output arguments in the order they appear in the VB argument list. See, > for example, the output vector method "GetOutputList" which retrieves all > the data in the output vector. In Python, the call looks like this: > iRet, nVals, liIds, lrData = zOutVec.GetOutputList(). > > The key thing in all this is to import that PyFemap file. When you do that, > it's infinitely easier to use the Femap API in Python than it is in VB or > C++. If you don't do it, you'll just never get it to work. > > - Greg Antal > > Gregory W. Antal > Senior Technical Advisor > ATA Engineering, Inc. > 11995 El Camino Real, Suite 200 > San Diego, CA 92130 > www.ata-e.com > > greg.an...@ata-e.com > 858-480-2072 (Phone) > 858-792-8932 (Fax) > > Jim Ragsdale wrote, On 12/2/2010 6:59 AM: > > I am trying to access the femap API, and having a bit of trouble. Here > is a simple example: > > from win32com.client import Dispatch > femap = Dispatch("femap.model") > rc = femap.feAppGetActiveView( > viewID) > > This method, according to the documentation, is supposed to return a > long integer in viewID. If I do not define viewID, python returns the > error: > > NameError: name 'viewID' is not defined > > if I define viewID=0, python returns: > > com_error: (-2147352571, 'Type mismatch.', None, 1) > > I ran makepy and it generates a file, but I don't know if it is using > it or not. In the file, I can find the definition for the method: > > def feAppGetActiveView(self, nViewID=pythoncom.Missing): > return self._ApplyTypes_(20376, 1, (3, 0), ((16387, 2),), > u'feAppGetActiveView', None,nViewID > ) > > To me it looks like win32 is not getting the information about the > variable types from com. Is there any way to get around this or am I > out of luck? > > Thanks, > Jim > _______________________________________________ > python-win32 mailing list > python-win32@python.org > http://mail.python.org/mailman/listinfo/python-win32 > > _______________________________________________ > python-win32 mailing list > python-win32@python.org > http://mail.python.org/mailman/listinfo/python-win32 > > _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32