IronPythonでのDLLの使用方法とは?

このQ&Aのポイント
  • Visual Basic 2010で作成したDLLをIronPython 2.6で使用しようとするとエラーが発生します。解決策はありますか?
  • Visual Basicで作成したDLLをIronPythonで呼び出す際に発生するエラーについて解決策を教えてください。
  • IronPythonでDLLを使用しようとしてエラーが出ています。どうすれば解決できるでしょうか?
回答を見る
  • ベストアンサー

IronPython でのDLL の使用について

Visual Basic 2010 でDLLを作成し,IronPython 2.6 で使用したいのですがエラーが出て動きません。 何かアドバイスがありましたらお願いします。 ・DLLの作成 Visual Basic の新規プロジェクトを”クラスライブラリ”として作成 (.NET Framework 2.0) Public Class aaa Public Sub bbb() MsgBox("AAA") End Sub End Class ・IronPython での呼び出し側 import os import clr import sys clr.AddReferenceByPartialName("Microsoft.VisualBasic") from Microsoft.VisualBasic import Interaction sys.path.append(os.path.dirname(os.path.abspath(__file__))) clr.AddReferenceToFile("test_VB.dll") import test_VB aa = test_VB.aaa aa.bbb() 実行すると, TypeError: bbb() takes exactly 1 argument (0 given) となってしまいます。 bbb()定義時には何も引数を指定していないのですが, 何を渡せばいいでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

REM IronPython初めて使う REM VBのソースをコンパイルする際使用したIDEはMonoDevelop REM まぁVisual StudioとSharpDevelop/MonoDevelopはMS OfficeとLibreOfficeみたいなもんだと思ってくれれば(以前誰かにわからん言われたorz) REM なお、普通に作ると、プロジェクト名がデフォルトネームスペースに設定されたりするので消すのを忘れないようにしました。 REM ビルドは.NET 4.0向け Option Explicit On Option Strict On Option Compare Binary Option Infer Off Imports System Public Class Test2 Public Sub Test() System.Console.WriteLine("Hello World") End Sub End Class =================== 作ったアセンブリ(Test2.dll)をD:\に配置。 で、使用したのはIronPython 2.7.2.1のzip版に含まれるインタープリタ(ipy.exe)。 で、正解は、コンストラクタでクラス名を引数に与えてインスタンスを生成した上で、 そのインスタンスから引数なしで呼び出すか(こっちの方が俺好み)、 import os import clr import sys sys.path.append("D:\\") clr.AddReferenceToFile("Test2.dll") import Test2 a = Test2.__new__(Test2) a.Test() =================== あるいは、型名から呼び出して第一引数にオブジェクトを渡すか。 import os import clr import sys sys.path.append("D:\\") clr.AddReferenceToFile("Test2.dll") import Test2 a = Test2.__new__(Test2) Test2.Test(a) 一応そのへんのことは http://readthedocs.org/docs/ironpython-test/en/latest/reference/datamodel.html#object.__new__ http://readthedocs.org/docs/ironpython-test/en/latest/reference/datamodel.html Class Types User-defined methods あたりに書いてあると思う 実際にやってみたら、ともにHello Worldが表示された。

hori_x11
質問者

お礼

無事に動作しました。 ありがとうございました。

関連するQ&A

  • VC++で作成したDLLについて

    すみません、 VC++6.0で作成したDLLについて教えていただきたいのですが。 TEST_A.DLLというDLLと、TEST_B.DLLというDLLファイルを作成したとして これをC:\TEST\DLL\に格納してるとします。 このとき、TEST_B.DLLからはTEST_A.DLLの関数を呼び出しています。 次に、TEST_B.DLLの関数を使用しているTEST.EXEという実行ファイルを VB6.0で作成します。 このファイルをC:\TEST\EXE\に格納します。 そして、TEST.EXEを実行すると、 「TEST_B.EDLLが見付かりません」と言って怒られてしまいます。 VBでは、TEST_B.DLLをフルパスで指定しております。 しかし、TEST_A.DLLをEXEと同じ場所に置いてあげると 正常に動きます。 これは、TEST_B.DLLからTEST_A.DLLが見えていないということなのでしょうか? TEST_B.DLLの設定がおかしいのでしょうか? それとも、TEST.EXEでもTEST_A.DLLをフルパス指定してあげないといけないのでしょうか? ちなみに今回、プロジェクトマネージャーから「環境変数(PATH)の設定はしたくない」と言われていますので、PATHの指定はしてません。 すみませんが、どなたか教えていただけますでしょうか?

  • Visual C++からDLLを呼び出す

    こんにちは。 VC++初心者です。 どなたか教えてください! VC++でAA.DLLというのを作成して、これをC:\TEST\に置いたとします。 次にBB.DLLというのを作って、この中でAA.DLLを呼び出したいのですが、どのような設定をすればよろしいのでしょうか? BB.DLLをどこに置いてもAA.DLLを呼び出したいんです。絶対パスで指定を指定するのかなぁと思うのですが、どこをどう設定していいのかわかりません。 ちなみにAA.DLLとBB.DLLが同じフォルダ内にある場合はうまくいきます。

  • dllが無いってでるんですが..

    ASPのVBスクリプトから-->VBで作成したdll-->MFCのdllという風にCALLされています。 MFCのdllがNotFoundでエラーになってしまいます。 もちろんdllファイルはあるしPATHも張ってあります。 なにかヒントになることでもいいので 教えてくださーい!

  • VBAで呼び出したVBのDLLのデバッグ方法

    VB2010で、COM相互運用機能を使って作成したDLLを VBAから呼び出すことはできるのですが この状態でこのDLLをデバッグすることはできないでしょうか。 本来ならば、DLLをデバッグするテストプログラムを VB2010のVB.NETのWindowsフォームアプリケーションか ConsoleApplication1で作成して、 同じソリューションの中に DLLとテストプログラムのプロジェクトを配置して 参照の追加でDLLを参照設定して 両者をデバッグをすると思われますが、 テストプログラムを作るのがかなり大変なのと、 今回作成したDLLは、元々はVBAの中のひとつのプロシージャ―で、 事情があって、このプロシージャ―だけをVBのDLLにしたものです。 このプロシージャ―は元々はVBAの中で正しく動作していたものです。 VBに書き直した時に何らかの不具合が起きていると思われます。 テストプログラムを作らずに、既存のVBAから呼び出して、 DLLの部分の動作だけを(できればVB2010で)デバッグできないでしょうか。 よろしくお願いします。 (WindowsXP SP3 , Excel2003のVBA , Visual Studio 2010)

  • DLL(コンポーネント)の読み込み方法

    VisualBasicでわからない点がありましたので質問します。 WiimoteLib.dllというコンポーネントファイルがあるのですが、それを読み込んでいろんな関数を使いたいのですが、それを読み込む方法がわかりません…。 ============================== ■開発環境 OS:Vista XP VBバージョン:Microsoft Visual Basic 2008 Express Edition ============================== 質問の仕方が悪いかもしれません…、理解できる方は教えてくださるとうれしいです。 よろしくお願いします。 また、不足した情報についてはまた指摘してください、追記したいとおもいます。

  • Visual Studio .NET C# でDLLを作成し、VB.N

    Visual Studio .NET C# でDLLを作成し、VB.NETで呼び出す初心者向けのサンプルについて  現在、Visusal Studio .NET C#でDLLを作成して、それを、VisualBasic.NETのWindowsアプリケーションで呼び出す簡単なプログラムを作成したいと思っているのですが、書籍をあたってもなかなか参考になる書籍がみつけられなく、サンプルのサイト又は、自分でそのようなプログラムを作成している人にぜひご教授願いたく、質問させていただきました。当方、初心者ですので、何卒宜しくお願いいたします。

  • VB2008でのDLL作成方法について

    はじめまして、はじめて投稿します。 初心者なので変な質問をしていたらすいません。VB2008を使用しています。 VBで作成したDLLファイルをLabviewで使用したいと思っています。 ただVB6.0でActiveX DLLを作成する方法はわかるのですが、VB2008で作成する方法がわかりません。 クラスライブラリでプログラムを作成し、DLLにすることはできるのです・ しかしレジストリに登録しようと思い「regsvr32 ファイルのパス**.dll」と入力したところ「**.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした」と出ます。 調べてもVB2008でのActiveX DLL作成方法が見つからなくて困っています!!! わかるかた、よろしくお願いいたします。

  • DLL作成時、defファイルを使いたくない

    また質問させて下さい。 Visual Studio2005でDLLを使ったプログラムを作ろうとしています。 defファイルを利用すると、そのDLLファイルを作成できるのですが、 __declspec(dllexport)を利用すると、DLLファイルのその関数を読めなくなってしまいます。 なぜでしょうか? 下記は、MFCで、dll_test7というプロジェクトを作り、そのdll_test7.hのコードのすぐ下に その関数を書きました。(これがダメだと思うのですが…) //●Visual Studioのプロジェクト作成で、生成される部分 // dll_test7.h : dll_test7.DLL のメイン ヘッダー ファイル // #pragma once __declspec(dllexport) void __cdecl test0(void); #ifndef __AFXWIN_H__ #error "PCH に対してこのファイルをインクルードする前に 'stdafx.h' をインクルードしてください" #endif #include "resource.h" // メイン シンボル // Cdll_test7App // このクラスの実装に関しては dll_test7.cpp を参照してください。 // class Cdll_test7App : public CWinApp { public: Cdll_test7App(); // オーバーライド public: virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP() }; //■作成した関数 __declspec(dllexport) void __cdecl test0(void) { CString cs; cs="aa"; ::AfxMessageBox(cs); } 上記は、defファイルを利用するとこの関数を呼び出せます。 以上、どうぞよろしくお願い致します。

  • VB.NETでDLL関数を呼び出すには

    VB.NETでDLLの関数を呼び出す時に、 NewではなくCreateObject()を使って呼び出すには、 どのように記述をすればよいのでしょうか。 具体的には、 ソリューション名 ClassLibrary1で ---------------------------------- Imports System.Windows.Forms Public Class Class1 Public Sub test() MessageBox.Show("テスト") End Sub End Class ---------------------------------- のコードをビルドしてClassLibrary1.dllを生成して、 ソリューション名 ConsoleApp1で ---------------------------------- Imports ClassLibrary1 Module Module1 Sub Main() Dim obj As Class1 obj = New Class1() 'obj = CreateObject("Class1") obj.test() End Sub End Module ---------------------------------- のコードをビルドして実行すると、 正しく実行できますが、 obj = New Class1() を obj = CreateObject("Class1") のようにすると図のようなエラーになります。 Newではなく、CreateObject()を使ってDLLを呼び出すには、 どのように記述をすればよいのでしょうか。 よろしくお願いします。 (Windows10)(Visual Studio 2022)

  • c++のdllが参照できません

    c++で作成したDLLをVBから参照したいのですが、 VBでの宣言はうまくいっていて自分の端末では動作するのに 他のPCではDLLがありませんとエラーがでるのですが System32の直下にDLLはありsystem32直下の他のC++のDLLは参照できるのに 今回新規で作成したものに関してうまくVBがDLLをみつけることが できません 条件は自分の端末とあわせました。 パスの指定など必要なのでしょうか? アドバイスください

専門家に質問してみよう