2012-01-10 20 views
-1

私はこれを手伝ってください。本当に刺激的なのは、私が最初にやっていることであり、経験がないからです。VC++でのDLLの作成(Visual Studio 2008)

目的:数値の階乗を求める。

。 。 STEP 1:タイプVC++ MFCの新しいプロジェクトを作成し、テンプレートMFC DLL

STEP 2:私は、ヘッダファイル(ServerHeaderを作成します。そして、通常のDLLを作成しています(MFC共有)私ははい

STEP 3を言います。次のコードH)

_declspec (dllimport) int factorial(int no); 

ステップ4:私はコード

#include "stdafx.h" 
_declspec (dllexport) int factorial(int no) 
{ 


return no == 0 ? 1 : no * factorial(no-1); 
} 

ステップ5にCPPファイル(ServerFactorial.cpp)を作成します。私は、プロジェクトをビルド私はVC++のWin32の別のプロジェクトのクライアントを作成して、テンプレートのWin32コンソールアプリケーションで、アプリケーションの設定で空のプロジェクトとして、コード

#include "ServerHeader.h" 

#include <iostream.h> 

void main() 
{ 


int no,i; 


cout<<"Enter number"; 


cin>>no; 


i=factorial(n); // calling the method 


cout<<endl<<i; // printing ans 

} 
で新しいCPPファイル(MainClass.cpp)を作成します。すべてが

STEP 6結構です

ステップ7:ServerHeader.h、Server.dll、Server.libをコピーします(2つのライブラリファイルがあり、1つがObjectであり、他がExportです)。サーバからクライアントにすべて4をコピーします。

ステップ8:右クライアントプロジェクトをクリックします。リンカの一般設定を設定し、クライアントプロジェクトフォルダにコピーしたlibファイルのパスを書き込みます

STEP 9:私は

エラー1致命的なエラーC1083を取得し、私のプロジェクトをビルド: 'でiostream.h':そのようなファイルまたはディレクトリF:クライアント\クライアント\のmainclass.cpp 2 \オープンファイルを含めることはできませんクライアント

このような長い投稿には申し訳ありません。

+0

コンソールアプリケーションから呼び出すMFC DLLを作成するのはなぜですか?また、コンパイルしようとしているコードを表示します。 include文は次のようになります: '#include '? –

+0

#include #include と#include "iostream.h"と#include "iostream"を使用してみましたが、同じエラーが発生します –

+0

こんにちはコーディーグレイ、もう一度試してみました。 が含まれていますが、iostream.hが見つかりません。#includeを使用すると#と表示されます。 "cout"と "cin"は認識できません。 –

答えて

2

それは#include <iostream>する必要がありますあなたは、名前空間、std::coutを含める必要がある、またはあなたのコード内using namespace stdのステートメントが含まれています。

+0

おかげジャクソンは、今やCOUTとCINのエラーはもうありませんし、私は、#include を使用していますが、今、私は次のエラーエラーにエラーLNK2019を取得しています:未解決の外部シンボル、関数___tmainCRTStartupで参照_main \t MSVCRTD.LIB \tクライアント エラー致命的なエラーLNK1120:未解決の外部が1つ\t F:¥Client¥Client¥ClientMain.exe クライアント –

+0

これは通常、コンソールアプリケーションを作成したがVSにWindowsアプリケーションをビルドするよう指示したことを示します。あなたがLNK1120までのエラーテキストをgoogleすると、多くの説明と解決策が見つかります。 – Jackson

+0

あなたの助けを借りてくれたジャクソンに感謝します。主な問題は、コンソールアプリケーションを書くこととVSにWindowsアプリケーションを伝えることでした。本当の愚かさ!!!!!!とにかく私はC++で2冊の本を持っていますが、それらはおそらくTurbo C++コンパイラを考慮する必要があるので#include を使用します。これは私がVSでC++をやっていたので、どちらも構文が異なり、私は2つの質問があります(1)私は古い構文を使用することができるようにVSでターボC + +コンパイラを統合することができますか...(2)またはMicrosoftのコンパイラとVSとしてのIDE。ありがとうございます –

1

共有ライブラリ(dll)を使用する場合は、階乗を直接呼び出すことはできません。 LoadLibraryを使用してdllをロードし、GetProcAddressの呼び出しで結果のハンドルと関数の名前を使用して、返された関数ポインタを呼び出す必要があります。名前で関数をロードできるようにするには、extern "C"指定子を指定してdllに宣言する必要があります。そのため、名前は装飾なしでエクスポートされます。代わりに.defファイルをdllプロジェクトに追加し、GetProcAddressを序数とともに使用する方法もあります。これらの一般的な指示があなたに役立つことを願っています。

関連する問題