Thanks a bunch! Seems I've gotten past my current problems. My next question, and I think I've heard something about this, but I'm not sure... Now that I've got my python code hooked up to ironpython, there shouldn't be anything that's python anymore, so to speak, right? I mean, when I import a python module using ironpython, it's all .net. My question is: What is the best way to access these classes in C#? Is it possible? I want to build up a gui containing data from the classes I've instantiated, and it would be nicer to do that in C# using VS. Another (unrelated) question: What's the best way to debug IronPython programs? "print-debugging" is not very effective. (maybe this deserves a mail thread of its own) /Anders
________________________________ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Curt Hagenlocher Sent: den 1 augusti 2008 16:39 To: Discussion of IronPython Subject: Re: [IronPython] Using a c library as a dll or assembly Here's how I think I would do it. Add a class definition to your C source that looks something like this: using namespace System::Runtime::InteropServices; ref class Exported { public: static int AdfHash(String^ str) { const char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str); int result = ::AdfHash(str2); Marshal::FreeHGlobal((System::IntPtr)(void*)str2); return result; } } You should then be able to import the Exported class from the assembly and access AdfHash through it. You'll need to write a similar wrapper for every function you want to export. Disclaimer: I've never actually used either Managed C++ or C++/CLI except to write small test cases. On Fri, Aug 1, 2008 at 4:25 AM, Anders Elfgren <[EMAIL PROTECTED]> wrote: Hi, thanks for the comments! In this case, I'm not trying to access a class, just a simple function that takes a string (char* ) and returns an int. I was hoping that would make it easier. I've compiled the dll with /CLR and I can load it like this: import clr clr.AddReference("System.Windows.Forms") clr.LoadAssemblyByName("AdfDll_R.dll") However, I still can't access anything inside it. Do I need to do something more? (if I try to load a dll that doesn't exist I get an error, so I'm assuming that there's not a problem with my dll). I've tried adding an import but I just get No module named AdfDll_R. The function is declared as: #ifdef __cplusplus extern "C" { #endif uint32 AdfHash(const char *str); } But when I try to call it, it doesn't work: NameError: name 'AdfHash' not defined I'm exporting the functions using a def file that looks (pretty much) like this: LIBRARY AdfDll_R EXPORTS ; from Adf.h AdfHash I'm using IronPython 1.1.1, but if it helps I'll be glad to change to another version. /Anders ________________________________ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Curt Hagenlocher Sent: den 31 juli 2008 20:21 To: Discussion of IronPython Subject: Re: [IronPython] Using a c library as a dll or assembly It wouldn't be sufficient to recompile with /clr. When you do that, your classes don't automatically become managed classes. You would still need to either modify your classes or to create wrappers using C++/CLI (http://en.wikipedia.org/wiki/C%2B%2B/CLI). In order for a C++ class to be visible to IronPython, it would need to be declared as a "ref class" -- you can see more about that at the referenced Wikipedia article. On Thu, Jul 31, 2008 at 9:22 AM, Anders Elfgren <[EMAIL PROTECTED]> wrote: Hi, First let me say that I'm new to Iron Python, but at least I've read this in the FAQ.. :) Q: How do I build and call into PYD libraries? A: IronPython does not support using PYDs built for CPython since they leverage implementation details of CPython. You can get a similar effect for new "PYD"s you would like to implement by writing them in C# or VB and building a DLL for .NET. That said, I've got some questions to see if what I'm doing is possible anyway. We've got a c library of which most of the code has also been written in Python. We want to create an editor using .net forms which we can use to edit some files, and to do that we need some data structures that exist in this library. My current idea is to interface against the python library using IronPython, and then accessing the datastructures through that in C# (although if absolutely necessary, we could write the editor in IronPython too). The thing that is standing against me now is that one function that exists a small C dll. Since IronPython can't access this (unless this has changed since the FAQ was written?), I was thinking that maybe I can compile the dll using the /clr flag and thus get a .net assembly. Would I then be able to use the function? The Python code just tries to import it: import AvHash And then use it.. def AdfHash(str): return AvHash.HashString(str) At the import statement, this error is raised: Traceback (most recent call last): File X:\ctg\libs\ADF\main\common\modeditor.ipy, line 20, in Initialize File , line 0, in __import__##4 File X:\ctg\libs\ADF\main\common\AdfLib.py, line 1, in Initialize File , line 0, in __import__##4 ImportError: No module named AvHash Or is there some other solution? I've just started researching how to interface between C/C#/Python/IronPython so there may well be things I haven't heard of... I hope I've made my problem clear, thanks for any responses. :) /Anders _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com _______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
