You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
2003年2月20日23時、米国ロードアイランド州のナイトクラブ「ザ・ステーション」で演奏中のロックバンドの演出用花火が舞台後方のカーテンに引火し火災が発生。死者99名、負傷者180名にのぼる大惨事となり米国史上4番目に大規模な火災事故として大きく報道された。入り口で将棋倒しになる危険や、煙が充満する速さを知って、的確に行動しましょう。現場平面図 https://www3.bostonglobe.com/rw//Boston/2011-2020/WebGraphics/Metro/BostonGlobe.com/2013/02/17fire/club_fire.jpg関連ページ http://docobt.blog11.fc2.com/blog-entry-2540.html
※1 関数のプロトタイプ宣言とLIBファイルの指定(コンパイラオプションでの指定または#pragma)のみで通常の関数の様に使える。 ※2 LIBファイル・ヘッダーファイルのないDLLに使用できる。 DLL側(C++) 以前の記事で書いたものと同じのを使う。 呼びだす側(C++) .libファイルの参照設定 まず、Dllと対になる.libファイルを参照するように設定追加する。 pjのプロパティ > リンカー > 入力 の、追加の依存ファイルに、必要な.lib(ここではDllTest.lib)を追加 pjのプロパティ > リンカー > 全般 の、追加のライブラリディレクトリに、その.libのあるフォルダを追加 ※libの設定は、コード中に#pragmaでも実施できる様子。(今回は試さず) 下記を参照。 http://yamatyuu.net/computer/program/sdk/base
// sample.cpp #include <windows.h> int main() { MessageBox(0, "サンプル", "", MB_OK); return 0; } 上記のファイルをcl.exeを使ってビルドするには、コマンドラインから… cl smaple.cpp user32.lib と、いう風に、MessageBox APIが格納されているライブラリ(user32.lib)をリンカに教えてやる必要がある。 このライブラリの指定を、ソースコード内に書くことができる。 #pragma comment(lib, "ライブラリ名") としてやれば良い。 つまり… // sample.cpp #pragma comment(lib, "user32.lib") #include <windows.h> int main() { MessageBox(0, "サンプル",
DLLロードの仕方には、静的リンク(暗黙的)と動的リンクがあります。 静的リンクの場合は、LIBファイルが必要となりますが、例えば文字コードの変換を行うMLANG.DLL等は、ヘッダーファイルは存在しますが、なぜかMLANG.LIBは存在しません。 LIBファイルがない場合は、DLLファイルからDEFファイルを作成し、DEFファイルをもとにLIB.EXEによりLIBファイルを作成することができます。 ただし、extern "C" _stdcallで定義されている関数の場合、 DEFファイルのみでLIB.EXEを使用して作成すると32bitの場合コンパイラの名前修飾規則とLIB.EXEの名前検索方法の指定が一致しないためリンクエラーか実行時にエラーが発生します。(Windows 64bitでは__stdcallは無視されるのでLIB.EXEのみで正常なLIBファイルを作成可能) 32bitで
実行時の DLL の遅延読み込みを制御するためのリンカー オプションです。 構文 /DELAY:UNLOAD /DELAY:NOBIND 解説 /DELAY オプションを使うと、DLL の遅延読み込みを制御できます。 /DELAY:UNLOAD 修飾子は、DLL の明示的なアンロードをサポートするように遅延読み込みヘルパー関数に指定します。 インポート アドレス テーブル (IAT) は元の形式にリセットされ、IAT のポインターは無効になって上書きされます。 /DELAY:UNLOAD を選択しない場合、__FUnloadDelayLoadedDLL の呼び出しはすべて失敗します。 /DELAY:NOBIND 修飾子は、バインドできる IAT を最終イメージに含めないようにリンカーに指定します。 既定では、遅延読み込みされる DLL に対してバインドできる IAT が作成されます。 生成
MSVC リンカーでは、DLL の遅延読み込みをサポートしています。 この機能により、DLL の遅延読み込みを実装するために、Windows SDK の関数 LoadLibrary と GetProcAddress を使用する必要がなくなります。 遅延読み込みを行わない場合、実行時に DLL を読み込む唯一の方法は、LoadLibrary と GetProcAddress を使用することです。オペレーティング システムでは、それが使用される実行可能ファイルまたは DLL が読み込まれるときに、DLL を読み込みます。 遅延読み込みを行う場合、DLL を暗黙的にリンクするときに、プログラムで DLL 内の関数が呼び出されるまでその DLL の読み込みを遅らせるオプションが、リンカーによって提供されます。 アプリケーションでは、/DELAYLOAD (遅延読み込みのインポート) リンカー オプ
LoadLibraryにロードしたいDLLを指定するとき、 そのDLLの名前をフルパスで指定した場合は原則そのDLLがロードされることになりますが、 ファイル名だけを指定した場合は、いくつかのディレクトリを検索ディレクトリとして、 指定したファイル名が探されることになります。 次に、検索される順番を示します。 1, EXEファイルが含まれているディレクトリ 2, プロセスのカレントディレクトリ(又は、SetDllDirectoryで指定したパス) 3, Windowsシステムディレクトリ 4, Windowsディレクトリ 5, 環境変数PATHで指定されたディレクトリ なお、Windows XP以降では次のレジストリキーの値が1であるとき、 2のカレントディレクトリは3と4の後に検索されます。 HKLM\System\CurrentControlSet\Control\Session Ma
1. DLLの作り方(VC++編) 関数subをDLLにしたい場合,次のようにソースプログラムを作成する. 外部プログラムから呼び出したい関数(この場合sub)の前に __declspec(dllexport)という おまじないをつけておく(このおまじないがついていない関数はDLL外部からは見えないので安心). #include <stdio.h> __declspec(dllexport) int sub(int arg) { printf("sub %d\n", arg); return arg + 1; } sub.c 通常の静的にリンクして利用する関数を作る場合(*.objまたは静的リンク ライブラリ*.libを作ってリンクする場合)との違いは, DLLの外に公開したい関数の定義の前に__declspec(dllexport)というキーワードがつけることだけになっている. [さらに
ひょんなことから golang で dll を動的に呼び出さなくてならなくて、引数として構造体のポインタを渡さなくちゃならなかったんだけど、調べてもよくわからんかったのでメモしておく。 dll 呼び出し側は以下のようなC言語の実装になっているとする。 #include "stdio.h" typedef struct struct1 { int x; int y; int ret; char name[8]; } struct1; int add0(int x, int y) { int ret; ret = x + y; return ret; } void add1(int x, int y, int *ret) { *ret = x + y; return; } void add2(struct1 *args) { args->ret = args->x + args->y; spr
golangでWindows APIを実行するための覚書(入り口)です。 やってみたこと まずは、感覚を知りたかったのでWindowsのKernel32.dllからGetTickCount関数を実行してOSの起動時間をmsで取得するプログラムを描いてみました。 ソース package main import ( "fmt" "syscall" ) func main() { // golang.org/x/sys/windows(参考) // https://godoc.org/golang.org/x/sys/windows // Win32 API 一覧(参考) // http://www.pinvoke.net/index.aspx // kernel32.dllをロード kernel32, err := syscall.LoadDLL("Kernel32.dll") if err
Twitterで「Go言語で、いわゆるプラグインの動的ロードってできる?」という発言を見かけたので。 CGOが書けるのでなんでも出来ます。Linux であれば goffi を使えばほぼ何でも出来ます。 cookieo9/goffi - GitHub Go FFI (and dlopen) packages to wrap C libraries. This code is not being actively d... https://github.com/cookieo9/goffi Windows であれば CGO を使わずとも、もともと Windows API には LoadLibrary、GetProcAddress という物が用意されており、Go言語にもその wrapper が提供されています。 package main import ( "log" "syscall" "uns
関東も秋が深まり、「紅葉を見にいこうよう」と言ってスベるシーズンがやってきました。みなさんいかがお過ごしでしょうか、れもんです。 さて、自社サイトでGoやるよって発表したので最近はずっとGoを書いているのですが、ついに難題がやってきました。C++で書かれたライブラリをGoで使うというやつです。今日は、GoからC++のライブラリを使おうとするときに何が起きているのかという話と、それゆえにこのオプションを指定するとドツボにはまるのでやめた方がいいよという話です。 GoからC++を使うときの基本的な考え方はRubyとかPerlでC++のライブラリを使うときと同じです。なので、いつものセオリーでやってみることにしました。まぁC++なら素直にSWIG使えよって話もあるんですが、何事も最初は挑戦だってことで手で書きます。 そのいつものセオリーとは何かというと、C++のライブラリをCインタフェースで使え
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く