タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

DLLとc++に関するreboot_inのブックマーク (5)

  • C++のマングルとextern "C" { - wagavulin's blog

    C++とCが混在したプログラムを書くとときどき定義したはずの関数がundefinedだと言われることがある。そんなときの対処法とマングルの話。 その前にまずはC言語だけの場合を考える。例えば以下のようなCのプログラムを書いてみる。 /* main.c */ #include "foo.h" int main(){ func1(); return 0; } /* foo.h */ #ifndef FOO_H void func1(); #endif /* foo.c */ #include "foo.h" #include <stdio.h> void func1(){ puts("ok"); } 見てのとおり、main.cはfunc1関数を呼び出しており、foo.cはfunc1関数を定義している。当然、main.cをコンパイルしてできたmain.oもfunc1を参照し、foo.cをコンパイ

    C++のマングルとextern "C" { - wagavulin's blog
  • 【C++】C++で作成したDLLをC++で呼ぶ(静的) - Qiita

    ※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

    【C++】C++で作成したDLLをC++で呼ぶ(静的) - Qiita
    reboot_in
    reboot_in 2020/10/21
    “※libの設定は、コード中に#pragmaでも実施できる様子。(今回は試さず)”
  • [VC++] リンクするライブラリファイルをソースコード内に記述する | あみだがみねのもろもろ備忘録

    // 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, "サンプル",

    reboot_in
    reboot_in 2020/10/21
    “MessageBox APIが格納されているライブラリ(user32.lib)をリンカに教えてやる必要がある。 このライブラリの指定を、ソースコード内に書くことができる。 #pragma comment(lib, "ライブラリ名") としてやれば良い。”
  • How to use `/DELAYLOAD` on a DLL from another DLL

    reboot_in
    reboot_in 2020/10/21
    “DLLの最初の関数が呼び出されるとすぐに、アプリケーションがクラッシュします。 GetLastError()126が生成されます。これは、ターゲットDLLがどの検索パスでも見つからなかったことを意味しているようです。”
  • ダイナミック リンク ライブラリ(DLL)の基礎知識

    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)というキーワードがつけることだけになっている. [さらに

    reboot_in
    reboot_in 2020/10/21
    “DLLの使い方:明示的リンクによる方法 明示的リンクでDLLを利用するプログラムは, LoadLibrary,GetProcAddress,FreeLibrary の3手からなる.”
  • 1