- PR -

WINSOCKライブラリをVS2005C++(CE用)で使用するとエラー?

1
投稿者投稿内容
ヒデ
会議室デビュー日: 2007/03/08
投稿数: 4
投稿日時: 2007-03-08 17:32
はじめまして。。。
VS2005のC++で元々VS6.0で作成されたプログラムを移植しています。
CE用に提供されたWinsockLIBを静的リンクしました。
すると、ソケットを作成し、サーバーへ接続する処理で未解決シンボルエラーとなり
DLLの作成ができません。
__GSHandlerCheck
__security_cookie
__security_check_cookie
_DllMainCRTStartup
以上4つの参照が解決できません。
特に上記関数は呼んでいないのですが、SOCKET関連の関数から呼ばれているのでしょうか?
VC6ではこのエラーは出ていませんでした。
.NET関連でセキュリティ強化?でもされたのでしょうか?
何か設定、または、解決策等ご教授願います。

開発環境:VS2005 C++(Win32スマートデバイスプロジェクトでMFC未使用のDLLです。)
ターゲットOS:WinCE.NET5.0(ARMV4I)です。
ヒデ
会議室デビュー日: 2007/03/08
投稿数: 4
投稿日時: 2007-03-12 16:26
自己レスです。と言っても解決はしていません
いろいろ調べたのでですが、現象の解決策がわかっておりません。
ただ、このプロジェクトの作成の時、W32スマートデバイスプロジェクトでDLLを作成しましたが、そもそもWinsockの静的リンクはできるのでしょうか?
別途MFCのDLLのテンプレートを使用すると「Winsockサポートする」の指定がウィザードでできるのです。と言うことは、.NET?ではAPIの様にWinsockAPIを呼び出すことはできないのでしょうか?(MFCやCFを使えば呼び出せる?)
だんだん.NETとは関連が無い質問になってしまいましたが、よろしくお願いいたします。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-03-12 17:14
こんにちは。

環境が無いので確認はとれてませんが、

"GSHandlerCheck"あたりで検索したら、下記のような記事が見つかりました。

http://blogs.msdn.com/mgaur/archive/2006/12/21/lnk2019-unresolved-external-symbol-gshandlercheck.aspx#1848355

明示的に「libcmt.lib」をリンクすれば、リンクエラーが回避できる…と書いてあるようですが!?
ヒデ
会議室デビュー日: 2007/03/08
投稿数: 4
投稿日時: 2007-03-12 18:31
Tdnr_Symさん。ご回答感謝します。
確かにlibcmt.libをリンク〜となってましたので、リンクしてみました。
・・・というか、リンクしようとして、どの様にリンクするんだっけ?とプロジェクトをいじくっていたのですが、「GSHandlerCheck」のエラーがいつの間にか無くなっていました???思い当たる変更箇所を戻したのですが、「GSHandlerCheck」のエラーだけは出なくなってしまいました。
libcmt.libの静的リンクの指定「#pragma comment(lib, "libcmt.lib")」をはずしてもエラーはでません。一度プロジェクトの設定でリンカ→入力→依存の追加でlibcmt.libを追加したんですが、この指定も取ったのですが???
全くもって、初心者の様な有様で恥ずかしいです。。。
良いか悪いか、とりあえず「GSHandlerCheck」はでなくなりました。
→ただ自分でも納得できていません。。。

__security_cookie
__security_check_cookie
_DllMainCRTStartup のエラーはまだ未解決です。

security_cookieは「MSVCRT.LIB」をリンクすればよさそう・・・の記述があったのですが、静的リンクしても解決できませんでした。

また何かありましたらよろしくお願いいたします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-03-12 23:46
引用:

ヒデさんの書き込み (2007-03-12 18:31) より:
__security_cookie
__security_check_cookie
_DllMainCRTStartup のエラーはまだ未解決です。


_DllMainCRTStartupはDLLのインスタンスルーチンです。たぶんプロジェクトの作り方を間違えていて、DLLのインスタンスルーチンがそのまま組み込まれているのでしょう。ソースコードを見直してください。

__security_cookieのほうはわからないです。
ヒデ
会議室デビュー日: 2007/03/08
投稿数: 4
投稿日時: 2007-03-13 09:23
甕星さん。ご回答ありがとうございます。

DllMainCRTStartupについてですが、インスタンスルーチンがそのまま組み込まれているとの事ですが、プロジェクト内を検索しましたが、見当たりませんでした。
Win32アプリケーションでいうところのWinMainの事でしょうか?
または、DLLのDllMainの事でしょうか?
Win32DLL(スマートデバイスアプリケーションのDLL)でウィザードを使用して
DLLを作成したので、自作API以外では作成していません。
何か設定等があるのでしょうか?

それと、security_cookieの方ですが、自己レスです。
プロジェクトの設定で、バッファセキュリティのチェックという項目があり、
その設定を「いいえ」(/GS-オプション)にするとエラーが出なくなりました。
バッファオーバーランのチェックをするオプションの様でデフォルトでは「はい」となっていました。
ただ、このオプションを「いいえ」にすることでどうなるかが不明なのと、
この「バッファオーバーランのチェック」とは無くても問題無いのかが、
いまいち分かりません。
良くSPの更新などでバッファオーバーラン云々と聞きますが、ソケット通信を
行う場合、このバッファオーバーランのチェックは必要なのでしょうか?
1

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