Linux でプログラム中からモジュールを読み込んでその中の関数を実行するにはどうしたらよいのでしょう。(ついでにモジュールの作り方も)
Windows の LoadLibrary & GetProcAddress に相当することです。

A 回答 (1件)

LoadLibrary() → dlopen()


GetProcAddress() → dlsym()
FreeLibrary() → dlclose()

です。詳細は man で。

共有ライブラリを作るには、-G オプションを指定して
ライブラリのリンクをします。

Windows系とちょっと違うのは、ライブラリの検索パスに
カレントディレクトリが *デフォルトで含まれない* こと
です。

それだけ注意していれば、マニュアルを見るだけで大丈夫でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございました
man のディレクトリを漁ってはみたんですが、セクション 2 だと思っていたので。3 だったんですね。しかもここにある RedHat 7 だと日本語しかない。man -K でひっかからないわけだ。

お礼日時:2001/04/20 13:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QWEBでEPSファイルを読み込んで任意の文字を埋め込んでまたEPSで出力したい

お世話になります。

WEB(PHPかなにかでと考えています)で
イラストレーター(EPS)ファイルを読み込んで
ユーザーが入力した文字を読み込んだEPSファイルと合成し、再度EPSファイルとして出力として出力したいとおもっているのですが方法がわかりません。

どなたかご教授願います。
よろしくお願いします。

Aベストアンサー

とりあえずPostScriptの文法はご存知ですか?

そもそもPostScriptは
「最終データ」であることを前提としています.
したがって,それを
自動で解析して修正するのは
かなり厄介です

しかも・・イラストレータのだすEPSファイルは
きわめて複雑ですし
「見た目上一つの単語」であっても
EPS内部では複数のパートに分かれています.

とりあえず,
お望みの機能を持っているようなライブラリの
存在は期待できないので.、
手動でお望みのことができないようであれば
自動化は不可能でしょう

ただもしかすると意外と簡単なのかも・・・
イラレ上でEPSに別のEPSファイルを埋め込んで
もとの埋め込み前のEPSと埋め込み後のEPS
埋め込んだEPSを見比べて
どのように埋め込まれているのかを解析して
それと同じことをプログラムできれば
よいのだが・・問題は埋め込み方の規則が
あるのか?ということと,イラレが
埋め込まれるEPSもばらばらにしてしまってたら
どうにもならないということ.

QLinuxでのシェルプルグラミングでファイル内の数字の読み込み

Linuxでのシェルプログラミングについての質問です。
(#!/bin/shを使ってます。)

改行、空白、数字をランダムに含むファイルを複数読み込んで、それぞれのファイルから数字だけ一個ずつ抜き出すにはどうすればいいでしょうか?

最初に二個の数字(A,Bとする)読み込んで、その二つの最大公約数(C)を計算した後、さらに次の数字(D)を読み込んで次は先ほどの公約数(C)と新しく読み込んだ数字(D)の最大公約数(E)を計算して・・・を繰り返していくプログラムを作ろうとしています。

最大公約数を計算するwhile loopはできています。数字はファイルから読み込まれるため、一個ずつ空白、改行を無視しながら読み込んでいかなければいけないと思うのですが、どのようにやっていけばいいのかわかりません。

Aベストアンサー

ファイルがそう大きくなければ、こんな感じで簡単に。
for n in `cat file`
do echo $n
done

ファイルが非常に大きければ、まず空白を改行に直して、空行を取り除いて、1行ずつ読む。
cat file | tr ' ' '\n' | grep -v '^$' | while read n
do echo $n
done

QVBScriptで外部プログラム実行中に「処理中」のダイアログボックスを表示したい

IPPプリンタを自動的にインストールするスクリプトを作成しています。プリンタドライバのインストールに時間がかかるので、その間に「処理中です。しばらくお待ちください」というダイアログボックスを表示したいのですがどのように実装したら宜しいでしょうか。

具体的には11行目の「WshShell.Run install, 1, True」が実行されてから終了するまでダイアログを表示したいと思っています。

以下作成したスクリプトです
------------------------------------
Option Explicit

Dim WshShell
Dim install
Dim open_window

install = "rundll32 printui.dll,PrintUIEntry /b ""プリンタ"" /x /n ""プリンタ"" /if /f ""RCBED12K.INF"" /u /r ""https://192.168.1.1"""
open_window = "control printers"

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Popup "プリンタドライバをインストールします。この処理には10秒以上かかる場合があります。しばらくお待ち下さい",10,"インストール"
WshShell.Run install, 1, True

WshShell.Popup "プリンタドライバのインストールが完了しました。この後自動的に開くウィンドウの中に「プリンタ」のアイコンが表示されていればインストール完了です。",10,"インストール"
WshShell.Run open_window

WScript.Quit
------------------------------------

IPPプリンタを自動的にインストールするスクリプトを作成しています。プリンタドライバのインストールに時間がかかるので、その間に「処理中です。しばらくお待ちください」というダイアログボックスを表示したいのですがどのように実装したら宜しいでしょうか。

具体的には11行目の「WshShell.Run install, 1, True」が実行されてから終了するまでダイアログを表示したいと思っています。

以下作成したスクリプトです
------------------------------------
Option Explicit

Dim WshShell
Dim instal...続きを読む

Aベストアンサー

過去に同様の質問が出てますね。
http://okwave.jp/qa/q2176278.html

VBScriptでマルチスレッド・マルチプロセスはできないので、この回答のように、
1.外部アプリを起動してそこに文章を出す
2.時間のかかる処理をする
3.外部アプリを終了させる
ということしか出来ないでしょう。

Qループ中にlabel_clickの読み込みを認識する

開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが
ループ中に、ラベルがクリックされたことを認識したいのです。ソースで説明すると
private void Form1_Load(object sender, EventArgs e)
{
  while(1)
  {
    if(label1がクリックされたら・・・)
    {
    }
    else if(label2がクリックされたら・・・)
    {
    }
  }
}
このようなif文を書きたいのですが、よい方法はないでしょうか?
よければ御知恵を貸してください。よろしくおねがいしますm(__)m

Aベストアンサー

あるプロシージャの中でループしているときに他のコントロールでのイベントを認識させるなら Application.DoEventsなどを呼び出してWindowsのメッセージポンプを機能させましょう

LabelのClickイベント自体は別途記述して そのフォームクラスのフィールドにクリックされたのかどうかを記憶しておきます

そのループ処理中でフィールドをチェックするようにすればいいと思います

boolean lbl1Click= false, lbl2Click = false;
などと宣言しておいて

void lblClick( s as object, e as Eventargs )
{
  Label lbl = (Label)s;
  if ( lbl.Name == "label1 )
  {
    lbl1Click = true;
  }
  esle if ( lbl.Name == "label2" )
  {
    lbl2Click = true;
  }
}
といった具合でクリックイベントを処理します

ループ処理側では
while( 1 )
{
  Application.DoEvents();
  if ( lbl1Click )
  {
    // Label1がクリックされた場合の処理
  }
  else if( lbl2Click )
  {
    // Label2がクリックされた場合の処理
  }
}
といった具合でしょう …

あるプロシージャの中でループしているときに他のコントロールでのイベントを認識させるなら Application.DoEventsなどを呼び出してWindowsのメッセージポンプを機能させましょう

LabelのClickイベント自体は別途記述して そのフォームクラスのフィールドにクリックされたのかどうかを記憶しておきます

そのループ処理中でフィールドをチェックするようにすればいいと思います

boolean lbl1Click= false, lbl2Click = false;
などと宣言しておいて

void lblClick( s as object, e as Eventargs )
{
...続きを読む

QMSアクセスのマクロ・モジュールを実行

MSアクセスのマクロ/モジュールを.batバッチファイル、もしくは.vbsのVBスクリプトでキックさせたいと思っています。

こういった方法は可能でしょうか?ぜひ教えて下さい、よろしくお願いします。

Aベストアンサー

Dim AcApp

Set AcApp = CreateObject("Access.Application")

AcApp.visible = true
AcApp.OpenCurrentDatabase "c:\temp\test.mdb" 'ファイル名
AcApp.DoCmd.RunMacro "マクロ1" 'マクロ名

これでどうでしょう。


人気Q&Aランキング

おすすめ情報