Cygwin なんでも掲示板

一覧最新記事過去一覧 | 検索FAQアンテナHOME
(新規投稿・発言はできません)

No.592  Re:cygwinのライブラリを利用するVCアプリ
発言者: S.Taka
発言日: 2002 09/13 23:38
 
質問からだいぶ経ちましたが、私のほうもすこし状況が分かってきました。

現在、質問した後から分かったことは...

1. ようやくcygwin1.dllのビルド方法とgdbの使い方が分かり始めてきたので、gdbを使ってどこで死んでいるかを調べてみると、cygheap.hのcygheap_fdgetコンストラクタ内の

296 if (fd >= 0 && fd < (int) cygheap->fdtab.size
297 && *(fh = cygheap->fdtab + fd) != NULL)

でcygheapがNULLになっているから死んでしまうようだ。
なんとなくcygwin1.dllの初期化ルーチンがまったく動作していないっぽい。


2. いろいろWeb上の情報を調べていくうちに、かつて、Mumit KhanさんがnoncygwinなアプリケーションからでもcygwinのDLLが使えるようにしてくれていたことがわかった。Mumit KhanさんのWebページにはExcel等からよびだすDLLの作成例がある。どうやらDLLのエントリポイントの関数を cygwin_noncygwin_dll_entryにすればよかったようだ。でも、現在のcygwin1.dllではうまくいかないようで、_cygwin_noncygwin_dll_entryのソースのコメントをみると

/* OBSOLETE: This is only provided for source level compatibility. */
int WINAPI _cygwin_noncygwin_dll_entry (HINSTANCE h, DWORD reason, void *ptr) \
{                                                                         \
return _cygwin_dll_entry (h, reason, ptr);                                 \
}                                                                         \

とOBSOLETEになってしまっている。


3. それでも、むりやりcygwin1.dllの初期化処理を呼んでやればよさそうな気がしたのでこの書き込みの最後の様にcygwin1.dllの初期化処理cygwin_crt0関数を呼んであげたらなんとか動作するようになった。

・・・

3の方法でなんとかcygwinのライブラリを使用するDLLをVCから使うことができたのですが、この方法では、main側のソースがないとどうしようもなく、今回の目的にはそいません。

引き続き、なにか情報があればおねがいします。


----------------------------------------------------------------
[testdll.c]

#include <stdio.h>

extern void cygwin_crt0(void *pmain);

void __stdcall initCygwinCRT(int (*pmain)(int argc, char **argv))
{
        cygwin_crt0(pmain);
}

void __stdcall testfunc(void)
{
        printf("testfunc\n");
}


[testdll.def]

EXPORTS
        testfunc@0
        initCygwinCRT@4




[main.c]

#include <stdio.h>
#include <windows.h>

void __stdcall initCygwinCRT(int (*pmain)(int argc, char **argv));
void __stdcall testfunc(void);

int main2(int argc, char **argv)
{
        testfunc();
        return 0;
}

int main()
{
        initCygwinCRT(main2);
        return 0;
}


▼関連発言

579:cygwinのライブラリを利用するVCアプリ [S.Taka] 09/01
 ├586:Re:cygwinのライブラリを利用するVCアプリ [水口] 09/09
 │└587:Re[2]:cygwinのライブラリを利用するVCアプリ [S.Taka] 09/10
 │ └603:Re[3]:cygwinのライブラリを利用するVCアプリ [ken] 09/21
 │  └604:Re[4]:cygwinのライブラリを利用するVCアプリ [S.Taka] 09/24
 │   └994:Re[5]:cygwinのライブラリを利用するVCアプリ [S.Taka] 03/16 <
 ├588:Re:cygwinのライブラリを利用するVCアプリ [やまもと] 09/10
 │└591:Re[2]:cygwinのライブラリを利用するVCアプリ [S.Taka] 09/13
 ├592:Re:cygwinのライブラリを利用するVCアプリ [S.Taka] 09/13
 │└873:Re[2]:cygwinのライブラリを利用するVCアプリ [森] 12/27
 │ └886:Re[3]:cygwinのライブラリを利用するVCアプリ [S.Taka] 01/02
 └763:Re:cygwinのライブラリを利用するVCアプリ [FX33V] 11/27
  └887:Re[2]:cygwinのライブラリを利用するVCアプリ [S.Taka] 01/02
   └888:Re[3]:cygwinのライブラリを利用するVCアプリ [S.Taka] 01/03
    └896:Re[4]:cygwinのライブラリを利用するVCアプリ [FX33V] 01/06

Pass 保存

早田のホームページへ
CGIROOM