2011-02-03 8 views
2

私はC++ビルダー6で書かれた簡単なプロジェクトを持っています。それは暗号化RSAアルゴリズムです。 C++ビルダー2010に変換したいが、エラーが発生するC++ビルダー6プロジェクトをC++ビルダー2010に変換する

メインプロジェクトのソースコード

//--------------------------------------------------------------------------- 

#include <vcl.h> 
#pragma hdrstop 

#include "UTForm.h" 
#include "UTRSA.h" 
//--------------------------------------------------------------------------- 
#pragma package(smart_init) 
#pragma resource "*.dfm" 
TForm1 *Form1; 
//--------------------------------------------------------------------------- 
__fastcall TForm1::TForm1(TComponent* Owner) 
     : TForm(Owner) 
{ 
randomize(); 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
TRSA a(Edit4->Text.ToInt()); 

char* tmp = a.KeyModul; 
Edit1->Text = AnsiString(tmp); 
tmp = a.OpenKey; 
Edit2->Text = AnsiString(tmp); 
tmp = a.SecretKey; 
Edit3->Text = AnsiString(tmp); 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::Button2Click(TObject *Sender) 
{ 
TNumber n(Edit1->Text.c_str()); 
TNumber e(Edit2->Text.c_str()); 
TNumber d(Edit3->Text.c_str()); 

THexString text; 
text.AsCharString = Edit5->Text; 

if (Edit3->Text != "") 
    { 
    TRSA a(n,e,d,Edit4->Text.ToInt()); 
    a.PlainText = text; 
    Edit6->Text = a.CryptedText.AsHexString; 
    } 
else 
    { 
    TRSA a(n,e,Edit4->Text.ToInt()); 
    a.PlainText = text; 
    Edit6->Text = a.CryptedText.AsHexString; 
    } 
} 

//--------------------------------------------------------------------------- 
void __fastcall TForm1::Button4Click(TObject *Sender) 
{ 
TNumber n(Edit1->Text.c_str()); 
TNumber e(Edit2->Text.c_str()); 
TNumber d(Edit3->Text.c_str()); 

THexString text; 
text.AsHexString = Edit6->Text; 

if (Edit3->Text != "") 
    { 
    TRSA a(n,e,d,Edit4->Text.ToInt()); 
    a.CryptedText = text; 
    Edit8->Text = a.PlainText.AsCharString; 
    } 
else 
    { 
    TRSA a(n,e,Edit4->Text.ToInt()); 
    a.CryptedText = text; 
    Edit8->Text = a.PlainText.AsCharString; 
    } 
} 
//--------------------------------------------------------------------------- 

エラーは以下のとおりです。

Build 
    Checking project dependencies... 
    Compiling RSA.cbproj (Debug configuration) 
    [BCC32 Warning] UTHexString.cpp(92): W8012 Comparing signed and unsigned values 
    [BCC32 Warning] UTHexString.cpp(92): W8012 Comparing signed and unsigned values 
    [BCC32 Warning] UTForm.cpp(29): W8057 Parameter 'Sender' is never used 
    [BCC32 Error] UTForm.cpp(33): E2285 Could not find a match for 'TNumber::TNumber(wchar_t *)' 
    [BCC32 Error] UTForm.cpp(34): E2285 Could not find a match for 'TNumber::TNumber(wchar_t *)' 
    [BCC32 Error] UTForm.cpp(35): E2285 Could not find a match for 'TNumber::TNumber(wchar_t *)' 
    [BCC32 Warning] UTForm.cpp(52): W8057 Parameter 'Sender' is never used 
    [BCC32 Error] UTForm.cpp(57): E2285 Could not find a match for 'TNumber::TNumber(wchar_t *)' 
    [BCC32 Error] UTForm.cpp(58): E2285 Could not find a match for 'TNumber::TNumber(wchar_t *)' 
    [BCC32 Error] UTForm.cpp(59): E2285 Could not find a match for 'TNumber::TNumber(wchar_t *)' 
    [BCC32 Warning] UTForm.cpp(76): W8057 Parameter 'Sender' is never used 
    Failed 
    Elapsed time: 00:00:01.5 
Project Import 
    Upgrading project "D:\SOFTS\DELPHI and C++ Builder 2009\Cryptography\RSA\RSA\RSA.bpr" 
    Reading "D:\SOFTS\DELPHI and C++ Builder 2009\Cryptography\RSA\RSA\RSA.bpr" 
    Upgraded to "D:\SOFTS\DELPHI and C++ Builder 2009\Cryptography\RSA\RSA\RSA.cbproj" 

私はC++ Builderの2010は、理由や、私が間違っているデフォルトのUnicodeのサポートを持っていると思いますか?私はtナンバーコンストラクタを見たとき それは次のようにあります

私は間違っ
//--------------------------------------------------------------------------- 
#ifndef UTNumberH 
#define UTNumberH 
//--------------------------------------------------------------------------- 
#include <assert.h> 
#include <iostream.h> 
#include <iomanip.h> 
#include <string.h> 
#include <ctype.h> 
#include <limits.h> 
#include <math.h> 

class TNumber 
{ 
private: 
     TNumber multdigit(int) const; 
     TNumber mult10(int) const; 

     char  *vlstr;       
     int  vlen;       
     int  vlsign;       

public: 

       TNumber(const char* = NULL);  
       TNumber(int);     
       TNumber(const TNumber &);  
       ~TNumber();      

       operator int() const; 
       operator long() const; 
       operator double() const; 
       operator char*() const; 

    const TNumber& operator=(const TNumber&); 

    TNumber operator -() const; 
    TNumber operator ++(); 
    TNumber operator ++ (int); 
    TNumber operator --(); 
    TNumber operator -- (int); 

     TNumber operator += (const TNumber &); 
    TNumber operator -= (const TNumber &); 
    TNumber operator *= (const TNumber &); 
    TNumber operator /= (const TNumber &); 
    TNumber operator %= (const TNumber &); 

    friend TNumber operator + (const TNumber &, const TNumber &); 
    friend TNumber operator - (const TNumber &, const TNumber &); 
    friend TNumber operator * (const TNumber &, const TNumber &); 
    friend TNumber operator/(const TNumber &, const TNumber &); 
    friend TNumber operator % (const TNumber &, const TNumber &); 

    friend int  operator == (const TNumber &, const TNumber &); 
    friend int  operator != (const TNumber &, const TNumber &); 
    friend int  operator < (const TNumber &, const TNumber &); 
    friend int  operator <= (const TNumber &, const TNumber &); 
    friend int  operator > (const TNumber &, const TNumber &); 
    friend int  operator >= (const TNumber &, const TNumber &); 

     char* strrev(char *s) const; 
    friend TNumber abs(const TNumber &); 
    friend TNumber sqrt(const TNumber &); 
    friend TNumber pow(const TNumber &, const TNumber &); 
    friend double div(const TNumber &, const TNumber &); 

    friend ostream & operator << (ostream &, const TNumber &); 
    friend istream & operator >> (istream &, TNumber &); 

    friend TNumber rnd(const TNumber& from, const TNumber& to); 
}; 

const TNumber zero = TNumber("0"); 
const TNumber one = TNumber("1"); 
const TNumber two = TNumber("2"); 

TNumber eae(TNumber u, TNumber v);    

#endif 

さらに、C++ Builder 6プロジェクトが添付されています。

+0

はい、TNumberにはTNumber(const char *)コンストラクターがあり、TNumber(const wchar_t *)コンストラクターはありません。 TNumberを改善するか、Unicodeをあきらめてください。 –

答えて

2

あなたは正しいですか?

TNumber n(AnsiString(Edit1->Text).c_str()); 

更新:UnicodeStringTextプロパティが最も可能性が高いこれらの一つであるため、ほとんどの文字列は2010年にデフォルトであるか、物事がコンパイルにする最も安全な方法は、以下のようなものを使用して戻って変換することになります:

コメントに基づいて、私は少し答えを明確にします。答えは、コードがANSiデータだけを期待していると仮定しています。それ以外の場合は、David M.が示したように、優れた解決策は、基礎となるTNumberクラスをUnicodeString(つまりwchar_t)を処理するように変更することです。

+1

Re Scottの答え:「最も安全」 - UnicodeからANSIへの変換が不可解であることを忘れないでください。これによりコンパイルが可能になりますが、ユーザーとプログラムのどちらかがANSI以外の文字を使用している可能性が非常に低い場合は、全体的に悪いアドバイスとなります。長期的には、TNumberがwchar_t *またはUnicodeStringコンストラクターを処理するようにするのがより良い解決策です。 –

+0

私はTNumber(wchar_t *)コンストラクタを追加しようとしましたが、まったく動作しませんでした。これは、VCLの文字列/数値変換ルーチンを使用することができます(例:StrToInt、StrToFloat)。 –

+0

@Scott Saad。あなたは正しいと言いましたが、今はTNumberで大丈夫ですが、log10(math.h)関数のような他のエラーが出ます。私が付いているプロジェクトを見て、エラーを修正してください。私はあなたにとても感謝しています!前もって感謝します!下記のリンクで私のプロジェクトを見つけてください。http://depositfiles.com/files/wi219076b –

0

"パラメータ '送信者'は決して使用されません"。偽 -

  • プロジェクト=>オプション
  • С++コンパイラ=>警告
  • "選択の警告を有効にする" "8056パラメータを使用し、より新しいです"。
関連する問題