トップページ > 記事閲覧
関数の一部をDLL化して使用すると例外が発生する
名前:DKS 日時: 2022/01/12 13:15

よく使う自作関数をDLL化して様々なプロジェクトで使いまわそうと思ったのですが、 描画系の関数を呼ぶと例外が発生します。 ■ testLib.h ■ #pragma once #ifdef TESTLIB_EXPORTS #define TESTLIB_API __declspec(dllexport) #else #define TESTLIB_API __declspec(dllimport) #endif namespace testLib { extern "C" TESTLIB_API void DrawExBox( int x, int y ); } ■ testLib.cpp ■ #include "pch.h" // use stdafx.h in Visual Studio 2017 and earlier #include <DxLib.h> #include "testLib.h" namespace testLib { void DrawExBox( int x, int y ) { DxLib::DrawBox( x, y, x + 10, y + 10, 0xff0000, true ); } } DxLib::DrawBoxを呼んだ時に以下の例外が発生 > 0x7922459B (testLib.dll) で例外がスローされました (testProject.exe 内): 0xC0000005: 場所 0x00000014 の読み取り中にアクセス違反が発生しました 描画系の関数はDLLから呼ぶことができないのでしょうか? ちなみにほかのDXLIB関数( 試したのはDxLib::ErrorLogFmtAdd )は問題なく動きました。 Dxlibを使うためのプロジェクト設定は設定済みです。
メンテ

Page: 1 |

Re: 関数の一部をDLL化して使用すると例外が発生する ( No.1 )
名前:とも 日時:2022/01/12 21:47

DXLib_Init()が同じtestLib.dllで呼ばれてないとか?
メンテ
Re: 関数の一部をDLL化して使用すると例外が発生する ( No.2 )
名前:管理人 日時:2022/01/13 01:43

DLLからDXライブラリの関数を呼ぶ場合は、DXライブラリの関数を全て一つのDLL内から呼ぶようにして、 そのDLL以外からは( プロジェクト内の cpp ファイルも含めて )一切DXライブラリの関数を呼ばないようにしないと正常に動作しません ( ErrorLogFmtAdd のように、たまたま問題なく動作する関数もあるかもしれませんが… ) なので、挙げていただいた例ではDXライブラリの関数の全ては testLib.dll 内の関数から呼ぶ必要があります ( DxLib_Init は main.cpp 内の WinMain から呼んで、DrawBox は testLib.dll 内の関数から呼ぶ、  ということをすると正常な動作の保証外になります )
メンテ
Re: 関数の一部をDLL化して使用すると例外が発生する ( No.3 )
名前:DKS(解決) 日時:2022/01/14 22:29

ともさん、管理人さんありがとうございます。 > DLLからDXライブラリの関数を呼ぶ場合は、DXライブラリの関数を全て一つのDLL内から呼ぶようにして、 > そのDLL以外からは( プロジェクト内の cpp ファイルも含めて )一切DXライブラリの関数を呼ばないようにしないと正常に動作しません それだと誓約が多すぎるのでDLL化は諦めることにしました。 スタティックライブラリ(lib形式)であれば普通にDXLIB関数を呼べたので、libで行きたいと思います。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存