smartdevice C # dll в VC ++ - PullRequest
       3

smartdevice C # dll в VC ++

1 голос
/ 24 августа 2010

Я пытаюсь создать DLL на C # для Windows Mobile, и у меня возникает ошибка при попытке доступа к DLL в VC ++.Можно ли создать DLL в C # и получить доступ к ней в VC ++, используя Windows Mobile?Я использую Windows Mobile 6 SDK.Следующий код очень хорошо работает в Desktop.

Код 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() 
        { 
            //dont 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 

<p>The C++ code: </p>


#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 
}

1 Ответ

1 голос
/ 25 августа 2010

Вы не можете сделать это в Compact Framework, потому что в нем отсутствуют CLR хостинг возможностей. У нативного приложения нет способа раскрутить механизм выполнения внутри своего собственного процесса, поэтому оно не может загрузить управляемый код. Это означает, что ваши собственные собственные приложения не могут загружать управляемые библиотеки DLL и браузер устройства.

...