文字列をLPCSTR型に渡すには?

解決


ネロ  2007-02-02 16:33:47  No: 64362  IP: [192.*.*.*]

VC++.NET(2003)の環境でプログラムを行っているのですが、
VB6.0−ActiveXDLL内の関数の引数(String型)にVCからはLPCSTR型で
データを渡そうと思っております。
しかし、VCでは文字列をchar型で扱っているため、LPCSTR型に渡すために
具体的にどうコーディングしていいのか分からず困っております。

char ok_ng[30];
LPCSTR tmp;

strcpy(ok_ng, "OK");
// char → LPCSTRの渡し方が分かりません。

プログラムの経験も浅いため、ご教授の程よろしくお願いします。

編集 削除
yama  2007-02-02 16:38:47  No: 64363  IP: [192.*.*.*]

LPCSTRはconst char* なので  ok_ngをそのまま渡せるんじゃないでしょうか?

編集 削除
ネロ  2007-02-02 16:54:44  No: 64364  IP: [192.*.*.*]

yamaさん、ありがとうございます。
ですが、文字列のコピーを行う
strcpy(ok_ng, "OK");
strcpy(tmp, ok_ng);
としても「1番目の引数をLPCSTRからchar*に変換できません」
というエラーが出てしまいます。
strcpy以外のコマンドがあるのでしょうか?

編集 削除
Blue  2007-02-02 17:00:08  No: 64365  IP: [192.*.*.*]

>strcpy(tmp, ok_ng);
tmpって何者でしょうか?

>「1番目の引数をLPCSTRからchar*に変換できません」
のメッセージから第一引数のtmpは"変更不可能"にも係わらず、値を入れようとしている

ということです。

もしかして CString に入れたいとか?
それならstrcpy使わないでもそのまま代入できるはずだけど。

編集 削除
ネロ  2007-02-02 17:20:55  No: 64366  IP: [192.*.*.*]

>tmpって何者でしょうか?
LPCSTR型のtmpです。

>もしかして CString に入れたいとか?
CStringに入れようとは思っておりません。
ただ単純にchar型の文字列をLPCSTR型のポインタにコピーするような
関数はないのでしょうか?という内容です。

編集 削除
yama  2007-02-02 17:28:23  No: 64367  IP: [192.*.*.*]

「文字列をポインタにコピー」というのがよくわかりませんが、
tmp = ok_ng;
ではだめなんでしょうか。
これでtmpの指す内容はok_ngの中身(つまり"OK")になるはずですが。

編集 削除
Blue  2007-02-02 17:29:53  No: 64368  IP: [192.*.*.*]

よくわからないけど
>LPCSTR型のポインタにコピーするような
とは最終的に何するために使うのでしょうか?

最初にyamaさんがおっしゃっていますが

LPCSTR tmp = ok_ng;

で出来るはずですけど。
ただし、このtmpを戻り値として返したりすると、tmpの指す先のok_ngが
ローカル変数のため不正なアクセスになってしまいますので注意が必要です。

編集 削除
ネロ  2007-02-02 17:33:01  No: 64369  IP: [192.*.*.*]

単純に「tmp = ok_ng;」でいいんですね。
難しく考えてしまっていました。勉強になりました。
yamaさん、ありがとうございました。

編集 削除
ネロ  2007-02-02 17:42:00  No: 64370  IP: [192.*.*.*]

すみません、掲示板に記載中にBlueさんからのコメントがあったようです。
>ただし、このtmpを戻り値として返したりすると、tmpの指す先のok_ngが
>ローカル変数のため不正なアクセスになってしまいますので注意が必要です。
上記のこと、気を付けたいと思います。
Blueさん、ありがとうございました。

編集 削除