c# で dll を作成しましたが、この dll の関数を c で使用したいと考えています。
そのオブジェクトをcで作成できます。
しかし、たとえば、関数を呼び出すことはできません: hello()。
Cでdll / comをインポートする他の方法はありますか?
main.c
#include <windows.h>
#include <objbase.h>
#include <stdio.h>
#include "IExample.h"
int main(int argc, char **argv)
{
IExample *exampleObj;
HRESULT hr;
if (!CoInitialize(0))
{
hr = CoCreateInstance(&CLSID_IExample, 0,CLSCTX_INPROC_SERVER, &IID_IExample, &exampleObj);
if (hr==S_OK)
{
exampleObj->lpVtbl->hallo(exampleObj); //**didnt call the function hallo**
exampleObj->lpVtbl->Release(exampleObj);
}
else
{
MessageBox(0, "Can't create IExample object",
"CoCreateInstance error",
MB_OK|MB_ICONEXCLAMATION);
}
CoUninitialize();
}
else
{
MessageBox(0, "Can't initialize COM", "CoInitialize error", MB_OK|MB_ICONEXCLAMATION);
return 1;
}
return 0;
}
IExample.h
#ifndef _IEXAMPLE_H_
#define _IEXAMPLE_H_
#include <initguid.h>
DEFINE_GUID(CLSID_IExample, 0x0C8C7C5A, 0x729F, 0x43A4, 0x90, 0x06, 0x57, 0x7B, 0xF6, 0x27, 0xFA, 0x75);
DEFINE_GUID(IID_IExample , 0xD685CD6F, 0x5D76, 0x4868, 0x9C, 0xE4, 0x8A, 0xBB, 0xF6, 0x0A, 0xCA, 0x06);
#undef INTERFACE
#define INTERFACE IExample
DECLARE_INTERFACE_ (INTERFACE, IUnknown)
{
STDMETHOD (QueryInterface) (THIS_ REFIID, void **) PURE;
STDMETHOD_ (ULONG, AddRef) (THIS) PURE;
STDMETHOD_ (ULONG, Release) (THIS) PURE;
STDMETHOD_ (BOOL, hallo) (THIS) PURE;
};
#endif // _IEXAMPLE_H_
class1.cs
using System;
using System.Runtime.InteropServices;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Forms;
namespace fb_dll
{
[Guid("D685CD6F-5D76-4868-9CE4-8ABBF60ACA06")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface DBCOM_Interface
{
[DispId(1)]
bool hello();
}
[Guid("0C8C75A-729F-43A4-9006-577BF627FA75")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class DBCOM_Class : DBCOM_Interface
{
public DBCOM_Class()
{
//Init();
//MessageBox.Show("jauaua");
}
public bool hello()
{
MessageBox.Show("jauaua");
return true;
}
}
}