2009-05-24 8 views
0

Visual C++、.NET、およびWindowsプログラミングの新機能(Objective-C/Cocoaの新機能)を使用しています。 CoreFoundation Lite)ライブラリ.libファイルにコンパイルしました。これは、管理されていない純粋なC言語で書かれており、管理されたCLR .NETアプリケーションで使用したいと考えています。 __CFStringMakeConstantStringのショートカットである関数CFSTRをリンクしようとすると、恐ろしく失敗します。何かアドバイス?エラーが添付されています。CLR以外のコードを.NETアプリケーションにリンクする

Proj.obj : error LNK2031: unable to generate p/invoke for "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]); calling convention missing in metadata 
Proj.obj : warning LNK4248: unresolved typeref token (01000016) for '__CFString'; image may not run 
Proj.obj : error LNK2028: unresolved token (0A00000B) "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __clrcall main(cli::array<class System::String^>^)" ([email protected]@[email protected]@@@Z) 
Proj.obj : error LNK2019: unresolved external symbol "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __clrcall main(cli::array<class System::String^>^)" ([email protected]@[email protected]@@@Z) 

UPDATE:私はちょうどのWin32とネイティブアプリケーションと一緒に行くことになった私のユーザーインターフェースは、(それがバックグラウンドのアプリです)とにかく最小限になるだろうされているので、呼び出します。私はp/invokeで少し遊んでいましたが、ちょうど私のような初心者のために複雑に思えました:p ありがとう!

答えて

1

管理対象のC++アプリケーションで使用している関数のシグネチャが、Cライブラリの関数シグネチャと比較して不一致であるようです。

管理された世界と管理されていない世界との間の通信に.Netが使用する技術はPInvokeです。 PInvokeの使い方の例としては、pinvoke.netがあります。あなたのC関数のシグネチャは非常にシンプルなので、正しい整列化されたパラメータを持つC++でマッチするものを作成するのは簡単です。

0

管理されていないからマネージコードで動作するように私が知っている方法でDLLを構築するか、COMと連携することです。

関連する問題