2010-08-24 5 views
1

Je suis en train de créer une DLL en C# pour Windows Mobile, et j'ai une erreur lorsque j'essaie d'accéder à la DLL dans VC++. Est-il possible de créer une DLL en C# et d'y accéder en VC++, en utilisant Windows Mobile? J'utilise Windows Mobile 6 SDK. Le code suivant fonctionne très bien dans Desktop.smartdevice C# dll dans VC++

Le code 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 

The C++ code:

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

Répondre

1

Vous ne pouvez pas le faire dans le cadre Compact car il manque CLR hosting capacités. Il est impossible pour une application native de faire tourner le moteur d'exécution à l'intérieur de son propre processus, elle ne peut donc pas charger de code managé. Cela signifie que vos propres applications natives ne peuvent pas charger les DLL managées, ni le navigateur de l'appareil.

+0

Merci ... Je vais essayer une solution IPC ... –

Questions connexes