- PR -

VC++5で作られたDLLをVC++2005で使用する

1
投稿者投稿内容
ミキボー
会議室デビュー日: 2007/01/15
投稿数: 4
投稿日時: 2007-01-15 10:21
環境:Windows XP,Visual Studio 2005

はじめまして
早速ですが質問です。

現在、あるところから提供されたDLLを使用して、
新たにアプリケーションを作成しているのですが、
DLLを読み込みがうまくいきません。

提供されたVC++5で作られた実行ファイルをVC++2005で開き
実行させるとうまくいくのですが、、、、

リンカもさせていまますし、
下記のようなソースも書いています。

---------------------------------------------------
//stdafx.hファイル内

#include <〜.h>
#pragma comment(lib,"〜.lib")


---------------------------------------------------


いろいろサイトも見たのですが、原因がわかりません。

DLLの読み込みができないと、次の段階に進めないので困っています。
よろしくお願いします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-01-15 10:27
引用:

提供されたVC++5で作られた実行ファイルをVC++2005で開き
実行させるとうまくいくのですが、、、、


とは?


とりあえず、XXXX.libでリンクさせず
LoadLibrary + GetProcAddress で動的にリンクできるか確かめてみてはどうでしょうか?
ただし、この方法ではDLL内のクラスを使うということは出来ないと思いますけど。
ミキボー
会議室デビュー日: 2007/01/15
投稿数: 4
投稿日時: 2007-01-15 10:29
もっと具体的に言いますと、

このプログラムを作る際、
global.hを作成し、そこにグローバル変数を定義しています。

その際に”HANDLE””USHORT”などの変数を定義しなければいけないのですが、
DLLをうまく読み込めないため、
定義として扱ってくれません。
(アラーとでtypedef void HANDLEとならなければならないところで、int HANDLEと表示されてしまいます)

ほかのグローバル定義したものも読み込まずエラーが出ます。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-01-15 10:35
引用:

その際に”HANDLE””USHORT”などの変数を定義しなければいけないのですが、
DLLをうまく読み込めないため、
定義として扱ってくれません。
(アラーとでtypedef void HANDLEとならなければならないところで、int HANDLEと表示されてしまいます)


意味不明です。

HANDLEやUSHORTという変数名があるのでしょうか?
そんな変数名使うべきではないでしょう。
(windows.hの型とバッティングするような識別子はダメでしょう。)
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-15 10:56
こんにちは。

引用:

ミキボーさんの書き込み (2007-01-15 10:29) より:

ほかのグローバル定義したものも読み込まずエラーが出ます。



すいません。よく分かりません。
エラーとは、
「実行時エラー」「コンパイルエラー」「リンクエラー」
のうち、どのことを指していますか?

引用:

(アラーとでtypedef void HANDLEとならなければならないところで、int HANDLEと表示されてしまいます)



typedef void* HANDLE
ではないですか?

プリコンパイル済みヘッダーstdafx.hの最初のほうで、
#include <windows.h>
を追加すれば良いだけのように思えるのですが。

ミキボー
会議室デビュー日: 2007/01/15
投稿数: 4
投稿日時: 2007-01-15 11:00
早速のご返答ありがとうございます。
すいません。。全くの初心者で説明がうまくいかず。。

変数といいますか、識別子といいますか。。。

データ型??と同じ扱いでHANDLEというものが用意されているらしく、
たとえば、

------------------------------------------------------------

apiStatus sample(HANDLE hCom,USHORT address,USHORT adress);

------------------------------------------------------------

という使い方をしろと説明書には書いてあります。

Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-15 11:19
こんばんは

引用:

ミキボーさんの書き込み (2007-01-15 11:00) より:
変数といいますか、識別子といいますか。。。

データ型??と同じ扱いでHANDLEというものが用意されているらしく、
たとえば、

------------------------------------------------------------

apiStatus sample(HANDLE hCom,USHORT address,USHORT adress);

------------------------------------------------------------

という使い方をしろと説明書には書いてあります。



つまり、「コンパイルエラー」なんですね?

stdafx.hで、#include <global.h>行の前に
#include <windows.h>
または
#include <windef.h>
を追加するか

stdafx.hのソース
コード:
#include <windows.h>
// #include <windef.h>

#include "global.h"




それとも直接global.hの先頭に
#include <windows.h>
または
#include <windef.h>
を追加すれば、コンパイルできますよね?

global.hのソース
コード:
#include <windows.h>
// #include <windef.h>

グローバル変数宣言や
プロトタイプ宣言など・・・



もしかすると、
C/C++でのWindowsプログラミングは初めてなんでしょうか?
ミキボー
会議室デビュー日: 2007/01/15
投稿数: 4
投稿日時: 2007-01-15 11:26
>Tdnr_Symさん
ありがとうございます。

早速やってみます。
C/C++でのWindowsプログラミングは、本の内容に沿ったプログラムを作っただけで、
新しく製作するのは初めてなんです。。。

アプリのプログラミング自体初心者なので、、
1

スキルアップ/キャリアアップ(JOB@IT)