VC++6.0の自作DLL関数でアプリケーションエラー – プログラミング – Home

VC++6.0の自作DLL関数でアプリ...
 
通知
すべてクリア

[解決済] VC++6.0の自作DLL関数でアプリケーションエラー


FT
 FT
(@FT)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

Access97のVBAからVC++5.0でビルドされていたDLLを外部関数として使うアプリ
があるのですが、今回の開発で
Access97をAccess2000
VC++5.0をVC++6.0
へコンパートしたところ、strncpy関数のところで「Accessのアプリケーション
エラー」が発生します。
対処法が分からなくて困っております。ご教授よろしくお願いします。

Accsss VBA での宣言
Declare Function kp_henkan3 Lib xxxxxxxx.dll _
(ByVal IN_STR As String, ByVal OUT_STR As String) _
As Long

kp_henkan3関数のVC++ソース
int WINAPI kp_henkan3(LPCTSTR IN_STR, char *OUT_STR)
{
int i;
static unsigned char sDummy[513];

/* 文字列変換 */
for( i=0; *(IN_STR+i); i++ ) {
switch( *(IN_STR+i) % 3 ) {
case 0 :
sDummy[i] = *(IN_STR+i) - 3;
if( sDummy[i] < 0x20 ) {
sDummy[i] = sDummy[i] + 0x20;
}
break;
case 1 :
sDummy[i] = *(IN_STR+i);
break;
case 2 :
sDummy[i] = *(IN_STR+i) + 3;
if( sDummy[i] > 0x7E ) {
sDummy[i] = sDummy[i] - 0x7E;
}
break;
}
}

strncpy(OUT_STR, (LPTSTR)sDummy, i);
OUT_STR[i] = NULL;

return 0;
}

エラーメッセージの内容
0x09ec2211 の命令が 0x00000000 のメモリを参照しました。
メモリが written になることはできませんでした。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

単に,呼び出し時のOUT_STRの長さが0なだけでは?
VBA側の呼び出しにミスがあるのだと思います。

あと,
> OUT_STR[i] = NULL;
環境によってはエラーです。
C言語のコンパイラの中には,
#define NULL ((void *)0)
と定義されている物がありますから。

NULLと'\0'の違いは知っておくべきです。


返信引用
FT
 FT
(@FT)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

VBA側で事前にOUT_STRをSpace()関数で初期化すれば、エラーを出さずに動くように
なりました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました