1

C# で Windows Mobile 用の DLL を作成しようとしていますが、VC++ で DLL にアクセスしようとするとエラーが発生します。

C# で DLL を作成し、Windows Mobile を使用して VC++ でアクセスすることは可能ですか?

Windows Mobile 6 SDK を使用しています。
次のコードは、デスクトップで非常にうまく機能します。

C# コード:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Runtime.InteropServices; 
namespace HttpLibrary 
{ 
    [ComVisible(true)] 
    [StructLayout(LayoutKind.Sequential)] 
    public struct StorageGroup 
    { 
        public int count; 
        public string[] Name; 
        public string[] sgdName; 
        public string[] logfolder; 
        public string[] systemfolder; 
    } 
    [ComVisible(true)] 
    public struct MyResult 
    { 
        public string Name; 
    } 
    [ComVisible(true)] 
    [Guid("F55EDB71-E3FC-4FC2-A25B-6E09C49B3E93")] 
    public interface IMyClass1 
    { 
        int helloWorld(); 
        StorageGroup getStorageGroup(); 
    } 
    [ClassInterface(ClassInterfaceType.None)] 
    [Guid("7B0D798D-DD45-41E1-A0D4-2FC453B36CED")] 
    [ComVisible(true)] 
    public class Class1 : IMyClass1 
    { 
        public Class1() 
        { 
            //constructor.. create object.. 
        } 
        public int helloWorld() 
        { 
            //don't do anything just return 10 so that client can get the return value.. 
            return 10; 
        } 
        public MyResult helloWorld(int i) 
        { 
            MyResult result = new MyResult(); 
            result.Name = "jigar"; 
            return result; 
        } 
        public StorageGroup getStorageGroup() 
        { 
            //Put code here.. 
            StorageGroup sg = new StorageGroup(); 
            int count = 3; 
            sg.Name = new string[count]; 
            sg.sgdName = new string[count]; 
            sg.logfolder = new string[count]; 
            sg.systemfolder = new string[count]; 
            sg.count = count; 
            for (int i = 0; i < count; i++) 
            { 
                sg.Name[i] = (i * 100).ToString(); 
                sg.sgdName[i] = i.ToString(); 
                sg.logfolder[i] = i.ToString(); 
                sg.systemfolder[i] = i.ToString(); 
            } 
            return sg; 
        } 
    } 
} 

C++ コード:

#import "c:\\pocket\\HTTP_POST_CS\\HttpLibrary\\HttpLibrary\\bin\\Debug 
\\HttpLibrary.tlb" 
BOOL CHttpLibraryTestDlg::OnInitDialog() 
{ 
        CDialog::OnInitDialog(); 
        // Set the icon for this dialog.  The framework does this 
automatically 
        //  when the application's main window is not a dialog 
        SetIcon(m_hIcon, TRUE);                 // Set big icon 
        SetIcon(m_hIcon, FALSE);                // Set small icon 
        CoInitializeEx(NULL, 0); 
        HttpLibrary::IMyClass1Ptr pIMyClass1(__uuidof(HttpLibrary::Class1)); 
//--->This line gives me a Raise Exception 
        int i=-1; 
        i = (int)pIMyClass1->helloWorld(); 
        return TRUE;  // return TRUE  unless you set the focus to a control 
}
4

1 に答える 1

1

CLR ホスティング機能がないため、Compact Framework でこれを行うことはできません。ネイティブ アプリが独自のプロセス内で実行エンジンを起動する方法がないため、マネージド コードを読み込むことができません。つまり、独自のネイティブ アプリはマネージ DLL を読み込めず、デバイス ブラウザーも読み込めません。

于 2010-08-25T12:30:56.987 に答える