C语言的结构描述如下:
#define CSSTJLNII_TXT_LEN (512)
typedef struct ImageInfotag
{
//---------摘要----------------------------
char strTitle[CSSTJLNII_TXT_LEN]; //标题
char strSubject[CSSTJLNII_TXT_LEN]; //主题
char strAuthor[CSSTJLNII_TXT_LEN]; //作者
char strKey[CSSTJLNII_TXT_LEN]; //关键字
char strRe[CSSTJLNII_TXT_LEN]; //备注
}ImageInfo;bool AFX_EXT_API SetImageInfo(char * szFile, ImageInfo *pinfo); 不知道在C#中需要怎么来描述上和调用上面的结构;我们按照结构体
iSize = 512; [StructLayout(LayoutKind.Sequential)]
public struct ImageInfoRead
{
//---------摘要信息----------------------------------
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strTitle;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strSubject;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strAuthor;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strKey;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strRe;
}
/// </summary>
[DllImport("PicCopyRight.dll", EntryPoint = "SetImageInfo", CharSet = CharSet.Ansi)]//
public static extern bool SetImageInfo(StringBuilder szPFile, ref ImageInfoByte pinfo);
有知道的同学指点一下, 谢谢先
#define CSSTJLNII_TXT_LEN (512)
typedef struct ImageInfotag
{
//---------摘要----------------------------
char strTitle[CSSTJLNII_TXT_LEN]; //标题
char strSubject[CSSTJLNII_TXT_LEN]; //主题
char strAuthor[CSSTJLNII_TXT_LEN]; //作者
char strKey[CSSTJLNII_TXT_LEN]; //关键字
char strRe[CSSTJLNII_TXT_LEN]; //备注
}ImageInfo;bool AFX_EXT_API SetImageInfo(char * szFile, ImageInfo *pinfo); 不知道在C#中需要怎么来描述上和调用上面的结构;我们按照结构体
iSize = 512; [StructLayout(LayoutKind.Sequential)]
public struct ImageInfoRead
{
//---------摘要信息----------------------------------
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strTitle;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strSubject;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strAuthor;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strKey;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = iSize)]
public char[] strRe;
}
/// </summary>
[DllImport("PicCopyRight.dll", EntryPoint = "SetImageInfo", CharSet = CharSet.Ansi)]//
public static extern bool SetImageInfo(StringBuilder szPFile, ref ImageInfoByte pinfo);
有知道的同学指点一下, 谢谢先
解决方案 »
- 如何遍历Winform上的所有组件?
- 实现了IEnumerator GetEnumerator接口但使用linq非法
- 关于弹出框
- 如何获取字符串像素长度??急,在线等答案!!!!!
- VS2005 专业版 Web程序断点设置失效问题(WinForm是Ok的)
- 北大青鸟学妹在学习webservice中遇到的问题,帮忙是好人
- C#代码问题 初学者
- sqldataadapter用事務更新時出錯後回滾,可表的rowstate已改
- C# 读取明华RF读卡器,验证密码不对,请帮忙,谢谢
- 我要疯了!!!!!——XP下怎么回事啊,用鼠标点菜单,闪一下就消失了!!不能执行程序啊
- 用C#怎样实现一张麻将牌面?
- C# 中调用VC(C语言写的)写的动态库问题, 结构中有数组;
using System;
using System.Runtime.InteropServices;
class MainApp
[DllImport("Kernel32")] //读取动态库文件
public static extern int GetProcAddress(int handle, String funcname); 给你讲一下我的经验:
首先 你在C#中调用的 是C++ 写的一个动态库。比如Kernel32.dll 中的 函数;
这个函数用C++写 有如下要求:
1、 必须为全局函数
2、 函数参数 必须为基本类型,也就是C++ 和C#都有的类型,否则你在public static extern int GetProcAddress(int handle, String funcname);
这里没有办法声明。 其余的 没什么了; 还有你可以参考这里:
C#中调用Windows API的要点
http://blog.csdn.net/jingshuaizh/archive/2009/02/04/3862019.aspx先前用VC写的程序生成的DLL,C#里能够调用么?
可以的话,在VC里传入参数为CString,而C#里是string,怎么传参数呢? 再者就是问,用VC写的DLL如果是一个导出类,而不是函数接口,C#里可以直接调用么?
第一个问题我遇到过, 可用如下方法解决: VC++ 中为: int Set(char** str,int n); //将 String 改成 char** , C# 中没有与String对应的类型
C# 中为: int Set(ref string str,int n);
VC++ 中的 BOOL 类型对应 C# 中的 System.Int32 类型, 建议改动一下参数类型吧.第二个问题,生成的DLL里的函数在一个类里面,这样的话在C#里需要实例化那个类么?怎么做
比如说,类solution里有函数int getch(int a);
我怎么调用这个getch函数?? 建议在C++中另外写个函数封装一下, 如:
int Dllgetch(int a)
{
solution st = //实例化 类solution
return st.getch(a);
}
这个 Dllgetch(int a) 就可以提取出来供 C# 调用.
你的方法可以,我也解决了
将CString 改成了LPCTSTR
BOOL在C#中对应的是Boolean