我正在尝试在 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
}