外部アプリケーションから秀丸のアウトプット枠への出力
(各言語での簡易な呼び出し例)

  • 概要

    HmSharedOutputPane.dllを利用した、各言語による呼び出しの基本例です。

    もしもあなたが「特別に」「64bit版の秀丸」をインストールしているのであれば、
    「HmSharedOutputPane.dll」を呼び出すプログラムも64bit版である必要性があります。

  • C#

    コンソールアプリケーションにしろ、フォームアプリケーションにしろ、
    総合的にはC#が一番簡単に利用できるでしょう。

    C#であれば、デフォルト設定の「ANY CPU」でコンパイルしておけば、
    秀丸32bit版か秀丸64bit版かを問わないプログラムとなるでしょう。
    「ANY CPU」ではうまくいかない場合には、「x86」として明示的にビルドするなどしてください。

    using System;
    using System.Runtime.InteropServices;
    
    
    class Program
    {
        [DllImport(@"C:\usr\hidemaru\hmSharedOutputPane.dll")]
        private extern static void SetSharedMessage(String msg);
    
        static void Main(string[] args)
        {
            for ( int i=0; i<100; i++)
            {
                SetSharedMessage("モジモジ文字列" + i.ToString());
            }
        }
    }
    
  • C++

    今回の例では、「文字セットをマルチバイト」として指定したものとします。

    #include <windows.h>
    #include <string>
    
    using namespace std;
    
    // 秀丸のディレクトリの指定。この場合は、「C:\usr\hidemaru\hidemaru.exe」という位置関係にある。
    const string strDLLFullPath = R"(C:\usr\hidemaru\HmSharedOutputPane.dll)";
    
    using PFNSETSHAREDMESSAGE = void(_stdcall *)(const char *szmsg);
    
    HMODULE dll = NULL;
    void main(void) {
      dll = LoadLibrary(strDLLFullPath.data());
      if (dll) {
        PFNSETSHAREDMESSAGE hmOutPut = (PFNSETSHAREDMESSAGE)GetProcAddress(dll, "SetSharedMessage");
        for(int i=0; i<100; i++) {
          string msg = "モジモジ文字列" + to_string(i);
          hmOutPut(msg.data());
        }
      }
    }
    
  • ActivePython

    ソースの手軽さとわかりやすさ、という点において、ActivePythonは群を抜いているでしょう。
    SHIFT_JIS(cp932)でPythonのソースを保存してください。

    #coding: cp932
    
    from ctypes import *
    dll = windll.LoadLibrary('C:\\usr\\hidemaru\\HmSharedOutputPane.dll')
    [ dll.SetSharedMessage( 'モジモジ文字列'+str(i) ) for i in range(0, 100) ]
    
  • hmLJ

    SHIFT_JIS(cp932)でLuaのソースを保存してください。

    ffi.cdef[[
    void SetSharedMessage(char *msg)
    ]]
    
    hmSharedOutputPane = ffi.load('C:\\usr\\hidemaru\\HmSharedOutputPane.dll')
    
    for i=0, 99 do
        luaString = "モジモジ文字列" .. tostring(i)
        szMsgBuf = ffi.new('char[?]', 1024,  luaString )
        hmSharedOutputPane.SetSharedMessage( szMsgBuf )
    end
    
  • Ruby

    今回の例では、SHIFT_JIS(cp932)でRubyのソースを保存したものとします。

    #coding: cp932
    
    require 'fiddle/import'
    require 'fiddle/types'
    
    module WinAPI
        extend Fiddle::Importer
        dlload 'C:\usr\hidemaru\HmSharedOutputPane.dll'
        include Fiddle::BasicTypes
        include Fiddle::Win32Types
    
        extern "void SetSharedMessage(const char*)"
    end
    
    0.upto(99) { |i|
        WinAPI::SetSharedMessage("モジモジ文字列" + i.to_s())
    }