高2で初心者です。よろしく願いします
VC++2010のwindowsFormでプログラムをつくっているのですが、テキストボックスのテキストを.txtファイルに出力するためにtextBoxのテキストの型であるSystem::Stringをstd::stringに変換するプログラムを入れたところ、エラーが出てきて意味もわからず詰んでしまっています。
解決策をお願いします。
//System::String→std::string
#include<string>
using namespace std;
using namespace System;
void MarshalString ( String ^ s, string& os ) {
using namespace Runtime::InteropServices;
const char* chars =
(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
os = chars;
Marshal::FreeHGlobal(IntPtr((void*)chars));
}
エラー
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_const_iterator<char,std::char_traits<char>,std::allocator<char> >): (0x02000019)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x0200003d)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std.basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >): (0x02000063)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_iterator<char,std::char_traits<char>,std::allocator<char> >): (0x02000080)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_val<char,std::allocator<char> >): (0x02000081)。
1>MSVCMRT.lib(locale0_implib.obj) : error LNK2022: メタデータの操作に失敗しました (8013118D) : 重複する型に、適合しないレイアウト情報があります (std._String_val<wchar_t,std::allocator<wchar_t> >): (0x02000083)。
1>LINK : fatal error LNK1255: メタデータエラーのためにリンクに失敗しました。
error lnk2022の解決方法がわかりません
-
Hina
Re: error lnk2022の解決方法がわかりません
System::String→std::stringのプログラムはあまり関係ないようです
コメントアウトしてもエラーに変化がありません。確認不足でした。
コメントアウトしてもエラーに変化がありません。確認不足でした。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: error lnk2022の解決方法がわかりません
面倒な変換しなくてもFile メソッドを使えば解決の気がします。
「File メソッド (System.IO)」
http://msdn.microsoft.com/ja-jp/library/3z2ck8eh.aspx
「File メソッド (System.IO)」
http://msdn.microsoft.com/ja-jp/library/3z2ck8eh.aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
Hina
Re: error lnk2022の解決方法がわかりません
そのようなクラスがあったのは知りませんでした。
有効に使っていきたいと思います。
ただ、error lnk2022が解決されません。
解決方法はなにかないでしょうか
有効に使っていきたいと思います。
ただ、error lnk2022が解決されません。
解決方法はなにかないでしょうか
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: error lnk2022の解決方法がわかりません
const char* chars = ってしなくて良くなったのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
Blue
Re: error lnk2022の解決方法がわかりません
System::IO::Fileを使うなら、std::stringは必要ないですね?
>#include<string>
>using namespace std;
これ消したらどうなりますか?
もしくは、
>using namespace std;
をやめて、std::~~ と記述するとどうでしょうか?
リンカ ツール エラー LNK2022
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx
>#include<string>
>using namespace std;
これ消したらどうなりますか?
もしくは、
>using namespace std;
をやめて、std::~~ と記述するとどうでしょうか?
リンカ ツール エラー LNK2022
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx
-
Hina
Re: error lnk2022の解決方法がわかりません
>>softyaさん
Fileメソッドの関数をつかうことにしてvoid MarshalString ( String ^ s, string& os )の関数は消してしまったので、
const char* chars = のような代入はしてないです。
>>Blueさん
>#include<string>
>using namespace std;
この二つを消したら、エラーは消えました!
ありがとうございました
Fileメソッドの関数をつかうことにしてvoid MarshalString ( String ^ s, string& os )の関数は消してしまったので、
const char* chars = のような代入はしてないです。
>>Blueさん
>#include<string>
>using namespace std;
この二つを消したら、エラーは消えました!
ありがとうございました