No.2ベストアンサー
- 回答日時:
ん?dll 内の関数が引数型として、std::string 型のものを持っていて、char * の内容の std::string 型をその関数の引数として渡したいということですか??
C++ 内では、 '\0' で終わっている char * を渡せば、std::string への型変換が自動的に働くからそのまま渡せばいいのでは?あるいは、std::string の変数を char * で初期化して渡してもいいですけど。
#include <string>
#include <iostream>
#include <cstring>
void func(const std::string &s) { std::cout << s << '\n'; }
void funcp(const char *p) { std::cout << p << '\n'; }
int main() {
char *cstr = "hoge";
func(cstr); // char * をそのまま渡す
std::string s(cstr);
func(s); // char * で std::string を初期化して渡す
std::string t;
t = cstr; // char * を std::string に代入して渡す
func(t);
funcp(s.c_str()); // s の "hoge" を渡す
char *q = std::strcpy(new char[s.size() + 1], s.c_str()); // 領域を確保して "hoge" を得る
funcp(q);
delete[] q;
}
=====
> ./a.exe
hoge
hoge
hoge
hoge
hoge
No.4
- 回答日時:
知りたいことがまったく別のことで、回答が的外れかもしれませんが、一応、「関数が引数型として、std::string 型のものを持っていて、…」のところをきちんと言っておくと^^;
たとえば、
void func1(const std::string &s) { ... }
void func2(std::string s) { ... }
void func3(std::string &s) { ... }
で、func1() と func2() の引数型なら、'\0' でおわっている char * をそのままわたせます。func3 は std::string 型を渡さないといけないので、char * で std::string 型の変数を初期化してから渡します。
回答ありがとうございます
No.2の回答で解決しました。
関数がLPSTRの引数で
内部でstd::stringで処理をし
戻り値としてLPSTRを返したかったのです
No.3
- 回答日時:
char * ではなく、char なら、
char c = 'a';
std::string s(&c, 1);
std::string t; // char で初期化できないが、代入はできる
t = c;
if (!s.empty()) c = s[0]; // s の最初の文字を得る
とかしておけばいいですけど。質問は、「dll で処理して云々」とあるから、こういうことじゃないんだろうなぁ。よくわかりませんでした、すみません^^
No.1
- 回答日時:
ご利用の VB と C++ 間で、「正式な言語間のインターフェイスが定義されていて、VB の string と C++ の std::string の変換方法もあるはずだが、探しても見つけられなかった」という前提でのご質問ならいいですが^^;
そうではなくて、言語間のインターフェイスが規定されていないなら、std::string などの表現は実装依存ですから、シンプルな型の char * で渡すのがいいのではないですか?(シンプルな型の char * でも、C・C++ ⇔ Fortran で関数を呼び合う場合、文字列長の引数などの指定方法が処理系依存だったような。。。 大域変数で渡すほうが移植性があるのかも^^)。
他に代替方法があるなら、正式サポートのない複数言語の混合使用は、できれば、やめたほうがいいのではないでしょうか?^^;
この回答への補足
今回はdll内部での話しで
C++内でcharからstd::stringへの変換ほうほうということです
わかりにくくてすみません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
"stdio.h"と<stdio.h>の違い
-
MingwでC++のソースがコンパイ...
-
c++での入出力がうまくいきませ...
-
C++でShowCursorを使いたい。
-
信頼区間の1.96や1.65ってどこ...
-
「Aに対するBの割合」と「Aに対...
-
2÷3などの余りについて
-
Enterキーを押されたら次の処理...
-
O(n log n)について2
-
ある商品のロス率を5%見込み、...
-
比と比の値について。 a:b=a/b ...
-
下記のプログラムがコンパイラ...
-
C言語 エラーの原因がわからな...
-
WindowsでEOF
-
ArduinoでMouse関数を使用して...
-
構造体の要素すべてに対する四...
-
マイナスからプラスへ転じた時...
-
プログラミング初心者です。 Py...
-
fopenでファイル名に、変数を使...
-
バタフライ演算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
#include "fstream.h"
-
空ENTERの判別
-
enumの値から定義名を文字列化...
-
_tcscat がうまくいきません(V...
-
gccでコンパイル時のエラー
-
std::wstringのメモリリークに...
-
JPEGやPNGが読めるLoadImage関数
-
なぜ、C++の標準ヘッダをインク...
-
C言語のエラーを修正したい
-
名前空間でビルドエラー(LNK20...
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
C言語のポインターで詰まっている
-
vectorのイテレータを大小比較...
-
CStringとString
-
#defineの使い方について
-
wstringの主力
おすすめ情報