一括表示

VB2010 Hamlog.hdb 読み込み 投稿者:JA2BQX 太田 

こんにちは。
先日 Win7 64bit版のPCを入手しました。
早速 Visual Basic 2010 Express Edition にてHamlog.hdbの読み込みに
トライしているのですが、上手く行っていません。
WinXpでは動作するソースがWin7ではNGで...。

どなたか上手く動作している方はおりますか?
アドバイスをいただけたら幸いです。

2012/06/28(Thu) 16:48:50  [No.289]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JO1SIM・出島  《URL》  

太田OM
こんばんは。

自分はVB2010ではないので確かなことは言えませんが、64ビットでの問題ということであれば、VBのソリューションのプラットフォームがAnyCPUかx64になっていませんでしょうか?HamlogのDLLは32ビットなので、64ビットで動作中の.NETからは呼び出せません。.NETのAnyCPUのアプリは実行時に環境に合わせてモードが切り替わるので、DLLをリンクする場合は明示的に32モード専用のアプリであるとする必要があると思います。

加えて、.NETアプリからはDLLにポインタを渡せないので、すべての動作が値渡しで動くようにスタブになるようなDLLを間におく必要があります。(読み込みは大丈夫だったかもしれませんが失念…)

簡単なスタブモジュールはわたしのHPにも置いてますので、ご参考まで!!

> こんにちは。
> 先日 Win7 64bit版のPCを入手しました。
> 早速 Visual Basic 2010 Express Edition にてHamlog.hdbの読み込みに
> トライしているのですが、上手く行っていません。
> WinXpでは動作するソースがWin7ではNGで...。
>
> どなたか上手く動作している方はおりますか?
> アドバイスをいただけたら幸いです。

2012/06/28(Thu) 23:33:01  [No.290]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JA2BQX 太田 

JO1SIM・出島さん、こんにちは。 ありがとうございます。

> 明示的に32モード専用のアプリであるとする必要があると思います。

Webなども参照していますが「ターゲットCPU」の選択画面までにたどり着けないでいます。

> 簡単なスタブモジュールはわたしのHPにも置いてますので、ご参考まで!!

THW2VBNET を使わせていただいていますが、上記の事が原因と思われますが下記のエラーで止まっています。

sd = HamlogOpen(Th, hamlogpath, 0) にて
'PInvokeStackImbalance が検出されました。
'Message: PInvoke(関数) 'read_hdb_1!read_hdb_1.Form1::HamlogOpen' がスタックを不安定にしています。

2012/06/29(Fri) 07:41:06  [No.292]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JO1SIM・出島  《URL》  

太田OM
でしまです。こんばんは!

THW2VBNETをご利用されていらっしゃるのですね。ありがとうございます。

VS2010とVS2008が一緒かどうかわかりませんが、VS2008の場合をお伝えしておきます。

VBプロジェクトのプロパティの「コンパイル」のプラットフォームでx86が選べるか見てください。選べなければ・・・
[ビルド]-[構成マネージャ]を開き、プラットフォームの箇所がAny CPUになっていれば、ドロップダウンから「新規作成」を選び、新しいプラットフォームをx86にしてOKを押してください。構成マネージャを閉じてもう一度VBプロジェクトのプロパティを選ぶとプラットフォームでx86を選べるようになっているはずです。

微妙にメニューの動きとか違うと困りますが・・・Googleなどで「vb .net x86」といった感じで検索すると関連しそうなページが出てきます。(ちょっと古い情報が多そうですが…)

いかがでしょうか?!!


> JO1SIM・出島さん、こんにちは。 ありがとうございます。
>
> > 明示的に32モード専用のアプリであるとする必要があると思います。
>
> Webなども参照していますが「ターゲットCPU」の選択画面までにたどり着けないでいます。
>
> > 簡単なスタブモジュールはわたしのHPにも置いてますので、ご参考まで!!
>
> THW2VBNET を使わせていただいていますが、上記の事が原因と思われますが下記のエラーで止まっています。
>
> sd = HamlogOpen(Th, hamlogpath, 0) にて
> 'PInvokeStackImbalance が検出されました。
> 'Message: PInvoke(関数) 'read_hdb_1!read_hdb_1.Form1::HamlogOpen' がスタックを不安定にしています。

2012/06/30(Sat) 01:28:45  [No.293]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JA2BQX 太田 

JO1SIM・出島さん、お世話をおかけします。ありがとうございます。

> VBプロジェクトのプロパティの「コンパイル」のプラットフォームでx86が選べるか見てください。選べなければ・・・

メニューからはその項目が見つかりません。

Web検索で read_hdb_1.vbproj の中身を直接...と言うのが
あったので見たところ
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
とか下記もありますが....。
<PlatformTarget>x86</PlatformTarget>

2012/06/30(Sat) 07:06:02  [No.294]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:jr1cpb/稲村 

> > VBプロジェクトのプロパティの「コンパイル」のプラットフォームでx86が選べるか見てください。選べなければ・・・
>
> メニューからはその項目が見つかりません。

ビルド に 構成マネージャ が見えないと言うことでしょうか?
であれば、

ツール-オプション-ビルド構成の詳細を表示

にチェックが入ってないのかもしれません。
これで、構成マネージャが表示されx86が選べるようになると思います。

私も2008なのでメニュー構成が異なっているかもしれませんが、、。

2012/06/30(Sat) 08:52:37  [No.295]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JA2BQX 太田 

jr1cpb/稲村さん、何時もありがとうございます。

> ビルド に 構成マネージャ が見えないと言うことでしょうか?
> であれば、

はい、そのようです。(良く探した積もりなのですが)

> ツール-オプション-ビルド構成の詳細を表示
> にチェックが入ってないのかもしれません。
> これで、構成マネージャが表示されx86が選べるようになると思います。

おかげさまで「ビルド構成の詳細を表示」を見つけました。
すでに「プラットフォーム」は x86 になっていました。

まだ sd = HamlohOpen(Th.HamlogPath,0) でエラーが出ますが。

2012/06/30(Sat) 11:57:17  [No.296]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JO1SIM・出島  《URL》  

太田OM
でしまです。おつかれさまです。

HamlogOpenでエラーとのことですが・・・
ThはInteger型で「ハンドル」で初期化されてますでしょうか?
あとはPathがStringになっているか…ぐらいですね。VB2010でこの辺の仕様が変わっていたりするとお手上げです。。。

> jr1cpb/稲村さん、何時もありがとうございます。
>
> > ビルド に 構成マネージャ が見えないと言うことでしょうか?
> > であれば、
>
> はい、そのようです。(良く探した積もりなのですが)
>
> > ツール-オプション-ビルド構成の詳細を表示
> > にチェックが入ってないのかもしれません。
> > これで、構成マネージャが表示されx86が選べるようになると思います。
>
> おかげさまで「ビルド構成の詳細を表示」を見つけました。
> すでに「プラットフォーム」は x86 になっていました。
>
> まだ sd = HamlohOpen(Th.HamlogPath,0) でエラーが出ますが。

2012/07/01(Sun) 00:30:58  [No.297]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JG1MOU浜田 

> HamlogOpenでエラーとのことですが・・・
> ThはInteger型で「ハンドル」で初期化されてますでしょうか?
> あとはPathがStringになっているか…ぐらいですね。VB2010でこの辺の仕様が変わっていたりするとお手上げです。。。

Integerが32ビットで、構造体がバイトアライメントであれば、大丈夫と
思うのですが・・・。

未だに Delphi 3.1(1997年)、Borland C++ 5.0(1996年)、
Visual C++ 5.0(1997年)などを愛用してます。
コンパイラも、生成された実行ファイルも軽くていいです。Hi
趣味のプログラミングは、この程度で十分です。

ただし、コンパイラのインストーラが64ビットに対応していなくて、
Win-XPの環境から丸ごとコピーして、64ビット環境で使ってます。
レジストリも。

何年先まで32ビットでやっていけるのか、ちょっと不安がありますが。

2012/07/01(Sun) 21:28:58  [No.298]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JA2BQX 太田 

皆さん、こんにちは。お手数をお掛けしました。
浜田さん、ありがとうございます。

「詳細コンパイル オプション」の「対象フレームワーク」が
「.NET Framework 4 Client Profile」になっていました。
(変更はした事はありませんでしたが)
これを .NET Framework 3.5 に変えたらWinXp、Win7共に
エラーが無く実行できるようになりました。.

NET Framework 4 にするとWinXp、Win7共にVB2010で
同じ Hamlogopen() の箇所でエラーが出ますが。

2012/07/02(Mon) 08:00:25  [No.299]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JO1SIM・出島  《URL》  

VB2010(VS2010)だと、.NET 4がデフォルトなのですね。

CLIという仮想マシンのバージョンも変わっているので、アンマネージコードを呼び出すあたりの仕様も微妙に変わっていると考えられます。

MSのサイトを見たところ…
「アンマネージコードとの相互運用性のパフォーマンスを向上させるために、プラットフォーム呼び出しに不適切な呼び出し規約があると、アプリケーションが失敗するようになりました。以前のバージョンでは、マーシャリング レイヤーがこれらのエラーを 1 つずつ解決しました。」
という記述がありました。たぶん、THW2VBNET.dllを呼び出す宣言(=サンプル)に誤りがあるものの、.NET3.5だと.NETが誤りを吸収してくれたものを、.NET4だとエラーとして報告する・・・ということだと思います。

自分の環境がVS2010(or later)になれば解消したいと思います。それまでしばしお待ちください。

ご迷惑おかけします・・・。

> 皆さん、こんにちは。お手数をお掛けしました。
> 浜田さん、ありがとうございます。
>
> 「詳細コンパイル オプション」の「対象フレームワーク」が
> 「.NET Framework 4 Client Profile」になっていました。
> (変更はした事はありませんでしたが)
> これを .NET Framework 3.5 に変えたらWinXp、Win7共に
> エラーが無く実行できるようになりました。.
>
> NET Framework 4 にするとWinXp、Win7共にVB2010で
> 同じ Hamlogopen() の箇所でエラーが出ますが。

2012/07/02(Mon) 18:05:34  [No.300]


Re: VB2010 Hamlog.hdb 読み込み 投稿者:JO1SIM・出島  《URL》  

浜田OMのおっしゃるとおり、今後には不安があります・・・。

ただ、.NETみたいに新しいのがコロコロでては変わるものより、結果的にWin32のコアAPIのようなものが長生きしているような気がしますね。WinRTという新しいAPIが出てきてますので、どうなるかわかりませんが、動作環境ということで言えば現行の32ビットのままでもあと10年はいけると思ってます。

「開発」についてはツール次第ではありますが・・・。

いつか.NETなり、WinRTで前面作り直さなければならない日が来るとしたら、かなりの恐怖です。

その頃にはクラウドでサーバサイドアプリになりますでしょうか?(笑)


> > HamlogOpenでエラーとのことですが・・・
> > ThはInteger型で「ハンドル」で初期化されてますでしょうか?
> > あとはPathがStringになっているか…ぐらいですね。VB2010でこの辺の仕様が変わっていたりするとお手上げです。。。
>
> Integerが32ビットで、構造体がバイトアライメントであれば、大丈夫と
> 思うのですが・・・。
>
> 未だに Delphi 3.1(1997年)、Borland C++ 5.0(1996年)、
> Visual C++ 5.0(1997年)などを愛用してます。
> コンパイラも、生成された実行ファイルも軽くていいです。Hi
> 趣味のプログラミングは、この程度で十分です。
>
> ただし、コンパイラのインストーラが64ビットに対応していなくて、
> Win-XPの環境から丸ごとコピーして、64ビット環境で使ってます。
> レジストリも。
>
> 何年先まで32ビットでやっていけるのか、ちょっと不安がありますが。

2012/07/02(Mon) 18:15:39  [No.301]