【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18534

Win32 Dynamic-Link Library について
投稿者---dedll(2004/12/06 21:19:25)


こんにちは。
今dllファイルを作っているのですが、教えてください。
環境はWindows XP pro, MS VC++6.0です。
Dllファイルを作る(MFCを用いずに)ために、新規作成で
プロジェクトを[Win32 Dynamic-Link Library]を選択して
ソースを書いているのですが、これまで[Win32 Application]
を選択して使っていたソースをそのまま貼り付けているにもかかわらず
エラーが出てしまいます。
このプロジェクトの種類を変えた場合何か変更すべき点があるのでしょうか?
実際にエラーが出るのは、timeGetTime, timeBeginPeriod,timeEndPeriod
が定義されていないと出ます。今まではこれで動いていたのですが・・・
ソースは以下のようなものを作っています。

#include<iostream>
using namespace std;
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<math.h>
#include<conio.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")//for ms

int main (void){

    double Begin, End;

    Begin = =timeGetTime();
    for(int i=0;i<10;i++){
        
        処理;

        timeBeginPeriod(1);
        Sleep(time);
        timeEndPeriod(1);
    }
    End = timeGetTime();
    
    cout << "total:" << (End-Begin0)/1000.0 << "\n";
    return 0;

}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:Win32 Dynamic-Link Library について 18535 通りすがり 2004/12/06 21:36:16


No.18535

Re:Win32 Dynamic-Link Library について
投稿者---通りすがり(2004/12/06 21:36:16)


> 処理;
これなんですか?

DLLのエントリポイントはmainやWinMainではなくDllMainです。
後はドキュメントを読みましょう。


この投稿にコメントする

削除パスワード

No.18538

Re:Win32 Dynamic-Link Library について
投稿者---dedll(2004/12/06 22:10:19)


>> 処理;
>これなんですか?

すみません、includeの部分のみでよいとおもい、簡単に書いたものを乗せていました。
次のようなソースを[ファイル]-[新規作成]-[ソースファイル]で作製しました。ヘッタファイル、メインなど他には何も作っていません。
実際に、他のソフトから使うことを予定していて、引数の値はそちらから
入力するというものにしています。
次のソースで、timeGetTimeなどにエラーが出ます。

#include<iostream>
using namespace std;
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<math.h>
#include<conio.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

double position(int N, int time){

    POINT pt;
    int i=0;
    double Begin0=0.0, End0=0.0,Total_begin=0.0,Total_end=0.0, End=0.0;
    double *T;
    T=new double[N]; 

    Total_begin=timeGetTime();  
    do{
        Begin0=timeGetTime();
        ::GetCursorPos( &pt );
        cout << i <<": (X,Y)=(" << pt.x << "," << pt.y << ")\n" ;
        //interval time
        timeBeginPeriod(1);
        Sleep(time);
        timeEndPeriod(1);
        End = timeGetTime();

        *(T+i)=(End-Begin0)/1000.0;
                
        i++;
        
    }while(i<N);

    Total_end=timeGetTime();
    double TT=((Total_end-Total_begin))/1000;
    cout << ">>TOTAL = " << TT<< "[s]\n\n";

    return 0;

}


>DLLのエントリポイントはmainやWinMainではなくDllMainです。
>後はドキュメントを読みましょう。

DllMainって何ですか?すみません、知識不足で。ドキュメントというのは
どこにあるのですか?



この投稿にコメントする

削除パスワード

No.18539

Re:Win32 Dynamic-Link Library について
投稿者---通りすがり(2004/12/06 23:13:50)


>>> 処理;
>>これなんですか?
>
>すみません、includeの部分のみでよいとおもい、簡単に書いたものを乗せていました。
include?

まぁとりあえずposition関数を呼びたいって事ですか?
というか0しか返さないけどこれでいいんですか。

>>DLLのエントリポイントはmainやWinMainではなくDllMainです。
>>後はドキュメントを読みましょう。
>
>DllMainって何ですか?すみません、知識不足で。ドキュメントというのは
>どこにあるのですか?

知識不足だとかそんなのどうでもいいから、せっかくネットにつないであるんだからDllMainをキーワードにして検索してみてはどうですか。
ドキュメントっていうのはAPIリファレンスのことです。コンパイラにVisual Studioを使っているのならスタートメニューに登録されているでしょう。

・・・っていうのもなんだからサンプル書いておきますね。超適当に書いたからエラー処理も適当です、後はどうすれば良いかは自分で調べてください。

---------------------------------------------------
// test.cpp
#include <windows.h>

BOOL WINAPI DllMain( HINSTANCE hinstDLL,
                     DWORD fdwReason,
                     LPVOID lpvReserved )
{
    return TRUE;
}

extern "C" __declspec(dllexport) int hoge(void)
{
    return 1;
}

---------------------------------------------------
// main.cpp
#include <windows.h>
#include <stdio.h>

typedef int (*PHOGE)();

int main(int argc, char **argv)
{
    HINSTANCE module = LoadLibrary( "main" );
    if ( NULL == module )
        return -1;

    PHOGE hoge = (PHOGE)GetProcAddress( module, "hoge" );
    printf( "%d\n", (*hoge)() );
    FreeLibrary( module );
    
    return 0;
}



この投稿にコメントする

削除パスワード

No.18540

Re:Win32 Dynamic-Link Library について
投稿者---通りすがり(2004/12/06 23:16:02)


×    HINSTANCE module = LoadLibrary( "main" );
○    HINSTANCE module = LoadLibrary( "test" );


すみません、間違えました。


この投稿にコメントする

削除パスワード

No.18541

Re:Win32 Dynamic-Link Library について
投稿者---dedll(2004/12/06 23:32:47)


ありがとうございます。
DllMainについては何とかなりそうですが、

timeGetTime等について聞きたいのですが・・・

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

の部分でtimeGetTimeを使えるようにしたつもりなのですが、
実行すると定義されていませんと出ます。
何が間違っているのか分かりません。


この投稿にコメントする

削除パスワード

No.18542

Re:Win32 Dynamic-Link Library について
投稿者---dedll(2004/12/06 23:47:42)


すみません、いろいろやってみた結果、今まで動いていた
プログラムまで全て
timeGetTime
timeBeginPeriod
timeEndPeriod
の3つが定義されていませんとエラーが出るようになってしまいました。
どうしたらいいのでしょう?


この投稿にコメントする

削除パスワード

No.18544

Re:Win32 Dynamic-Link Library について
投稿者---nop(2004/12/07 08:47:43)


>すみません、いろいろやってみた結果、今まで動いていた
>プログラムまで全て
>timeGetTime
>timeBeginPeriod
>timeEndPeriod
>の3つが定義されていませんとエラーが出るようになってしまいました。
>どうしたらいいのでしょう?

まずは、何でもかんでも質問せずに、
検索して必要な情報を見つける癖・技術を身につけましょう。

[参考:Yahoo で「timeGetTime」検索して最初にあったページ]
http://www.tsg.ne.jp/sept/prg/memo/timegettime.asp


この投稿にコメントする

削除パスワード

No.18554

timeGetTime()
投稿者---dedll(2004/12/07 21:59:30)


調べて、ソースを作って実行しているつもりなんですが・・・
mmsyste.hをインクルードして、winmn.libとリンクしている
つもりですが、timeGetTime()が定義されていませんと出ます。
どこがいけないのか教えていただけませんでしょうか?

#include<stdio.h>
#include<time.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

int main(void){

    double total, end, begin,a=0.0;
    begin = timeGetTime();
    for(int i=0;i<10;i++){
         a+=i;
         printf("%f,\n",a);
    }
    end = timeGetTime();
    total=end-begin;

    printf("%f,\n",total);
    return 0;
}



この投稿にコメントする

削除パスワード

No.18555

Re:timeGetTime()
投稿者---確証ないですゴメンナサイ(2004/12/07 22:06:54)


別のライブラリで以前 pragma comment がきかなくて同様に
はまったことがありました。プロジェクトの設定で指定したらOK。
原因は今でもわからないのですが同じ現象だったりはしませんか。
#直るなら僕も直したい。



この投稿にコメントする

削除パスワード

No.18563

Re:timeGetTime()
投稿者---dedll(2004/12/07 23:51:01)


>別のライブラリで以前 pragma comment がきかなくて同様に
>はまったことがありました。プロジェクトの設定で指定したらOK。
>原因は今でもわからないのですが同じ現象だったりはしませんか。
>#直るなら僕も直したい。

ありがとうございます。突然動かなくなったので混乱してしまいました。
プロジェクトの設定で指定します。
教えてくださりありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧