dll的引用和使用,没用过,大家来指点一下~

mykelly6 2008-11-25 09:42:59
我通过注册表找到了需要的dll文件所在路径,怎么样引入这个dll文件呢,
然后要使用这个dll里面的东西,又该怎么办呢,比如说获取里面的类阿,方法之类的。
刚用c#没多久,大家就当帮我扫盲吧,谢谢~
...全文
152 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
mykelly6 2008-11-26
  • 打赏
  • 举报
回复
还是没搞定,只好揭帖了
mykelly6 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hanlong2006 的回复:]
如果dll是基于.NET FrameWork的,如楼上所说直接添加引用即可;
如果基于Win32API的在程序中使用

C# code[DllImport("your.dll")]
[/Quote]

我试了下添加引用时不行的,应该是基于Win32API的,但是在程序中引用的话这个路径未必是固定的阿
hangang7403 2008-11-25
  • 打赏
  • 举报
回复
添加引用就可以了
@oomoo@ 2008-11-25
  • 打赏
  • 举报
回复
如果dll是基于.NET FrameWork的,如楼上所说直接添加引用即可;
如果基于Win32API的在程序中使用
[DllImport("your.dll")]
mykelly6 2008-11-25
  • 打赏
  • 举报
回复

// 读取Outlook Express通讯薄内容(文件夹、名字、EMAIL)
void CGetEmailDlg::OnOK()
{
HRESULT hRes;
LPADRBOOK lpAdrBook;
LPWABOBJECT lpWABObject;

DWORD Reserved2 = NULL;

HINSTANCE hinstLib;
hinstLib = LoadLibrary("C:\\Program Files\\Common Files\\System\\wab32");
fWABOpen procWABOpen;
WAB_PARAM wp = {0};
wp.cbSize = sizeof(WAB_PARAM);

// Only want to deal with "Main Identity's Contacts"
wp.ulFlags = WAB_ENABLE_PROFILES; //设置这个值的话,表示只取当前的标识wab.去除share folder

if (hinstLib != NULL)
{
// 获取"Wab32.dll"内部涵数WABOpen的进程地址
procWABOpen = (fWABOpen) GetProcAddress(hinstLib, "WABOpen");

if (procWABOpen != NULL)
{
hRes = (procWABOpen)(&lpAdrBook,&lpWABObject,&wp,Reserved2);
_ASSERTE(hRes == S_OK);
if (hRes != S_OK) exit(1);

ULONG lpcbEntryID;
ENTRYID *lpEntryID;
hRes = lpAdrBook->GetPAB(
&lpcbEntryID,
&lpEntryID
);


_ASSERTE(hRes == S_OK);
if (hRes != S_OK) exit(2);

ULONG ulFlags = MAPI_BEST_ACCESS;
ULONG ulObjType = NULL;
LPUNKNOWN lpUnk = NULL;
hRes = lpAdrBook->OpenEntry(
lpcbEntryID,
0, //将这个值设为0的话,取得的将是wab中的所有目录。如果是设为&lpEntryID,则取得的是所有的联系人记录项
NULL,
ulFlags,
&ulObjType,
&lpUnk
);

ulFlags = WAB_LOCAL_CONTAINERS; //这里ulFlags如果设为WAB_PROFILE_CONTENTS,则表示在container里获取所有的记录。造成每个folder里读取出来的记录都是全部记录
// ulFlags = WAB_PROFILE_CONTENTS;
if (ulObjType == MAPI_ABCONT)
{
IABContainer *lpContainer = static_cast <IABContainer *>(lpUnk);

LPMAPITABLE lpTable = NULL;
hRes = lpContainer->GetHierarchyTable(CONVENIENT_DEPTH,&lpTable);//从container中取得table,这里的table保存了文件夹信息
// hRes = lpContainer->GetContentsTable(ulFlags,&lpTable);
_ASSERT(lpTable);
ULONG ulRows;
hRes = lpTable->GetRowCount(0,&ulRows);//第1个参数为保留参数。固定为0
_ASSERTE(hRes == S_OK);
SRowSet *lpRows;

hRes = lpTable->QueryRows(
ulRows, // 获取所有行
0,
&lpRows
);

m_ListEmail.ResetContent();

SRow *lpRow = NULL;
SPropValue *lpProp = NULL;
BOOL bNotFolder = FALSE;
IABContainer *lpContainer2 = NULL;
LPENTRYID lpEID;
ULONG cbEID;
for(ULONG i=0;i<lpRows->cRows;i++)
{
bNotFolder = FALSE;
lpRow = &lpRows->aRow[i];
CString strTemp=_T("");
CString strM = _T("");
CString strFolderName = _T("");

for(ULONG j=0;j<lpRow->cValues;j++)
{
lpProp = &lpRow->lpProps[j];
if (lpProp->ulPropTag == PR_DISPLAY_NAME_A)
strFolderName = strFolderName +"目录: " + (char *)lpProp->Value.lpszA;

if (lpProp->ulPropTag == PR_ENTRYID)
{
lpEID = (LPENTRYID)lpProp->Value.bin.lpb;
cbEID = lpProp->Value.bin.cb;
}
if (lpProp->ulPropTag == PR_DEPTH)
{
if(lpProp->Value.l ==0)
{
bNotFolder = TRUE;
break;
}
}
}
if(bNotFolder)
continue;
hRes = lpContainer->OpenEntry(
cbEID,
lpEID,
NULL,
ulFlags,
&ulObjType,
(LPUNKNOWN *)&lpContainer2
);
LPMAPITABLE lpTable2 = NULL;

hRes = lpContainer2->GetContentsTable(ulFlags,&lpTable2);
ULONG ulRows2;

hRes = lpTable2->GetRowCount(0,&ulRows2);
SRowSet *lpRows2;

hRes = lpTable2->QueryRows(
ulRows2, // 获取所有行
0,
&lpRows2
);
for(ULONG i=0;i<lpRows2->cRows;i++)
{
SRow *lpRow2 = &lpRows2->aRow[i];
CString strEmail=_T("");
CString strName=_T("");
for(ULONG j=0;j<lpRow2->cValues;j++)
{
SPropValue *lpProp2 = &lpRow2->lpProps[j];
if (lpProp2->ulPropTag == PR_EMAIL_ADDRESS_A)
strEmail = strEmail +" Email: " + (char *)lpProp2->Value.lpszA;
if (lpProp2->ulPropTag == PR_DISPLAY_NAME_A)
strName = strName +" Name: " + (char *)lpProp2->Value.lpszA;

}
strTemp = strFolderName + strName + strEmail;
m_ListEmail.AddString(strTemp);
lpWABObject->FreeBuffer(lpRow2);
}
lpWABObject->FreeBuffer(lpRows2);
lpWABObject->FreeBuffer(lpRow);
}
lpWABObject->FreeBuffer(lpRows);
}
}
FreeLibrary(hinstLib);
}
}


这个不是c#写的,我看不大懂。。好像是loadLibrary就ok了~
哪位大大帮我写成c#的我加分~
wyg19861016 2008-11-25
  • 打赏
  • 举报
回复
添加引用 把你做的项目中的dll文件给引用进去就可以了
mykelly6 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Old_Mouse 的回复:]
copy到bin目录 右键点击项目中的引用添加引用。
[/Quote]
关键这个路径未必是固定的阿,所以是不是可以动态引用下?
呦呦 2008-11-25
  • 打赏
  • 举报
回复
引用:

[DllImport("idcarddll.dll", EntryPoint = "RecogNewIdcardALL ",
CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]//加载dll
public static extern int RecogNewIdcardALL(string imgfile_name, ref IDCARD idcard, bool bSaveResultFile, int nContent, string HeadImgFName);// 这是方法


mykelly6 2008-11-25
  • 打赏
  • 举报
回复
为什么有回复我看不见,悲剧阿。。
Old_Mouse 2008-11-25
  • 打赏
  • 举报
回复
copy到bin目录 右键点击项目中的引用添加引用。
mykelly6 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hanlong2006 的回复:]
所以 万一你怕你在你工程的引用路径里找不到这些dll的话
你就将你需要的dll拷贝到与".exe"同一目录下吧
[/Quote]

现在把wab32.dll拷贝到与".exe"同一目录下了,然后使用wab32.dll的时候也不知道类名什么的阿。。
而且[DllImport("wab32.dll")]还报错。
  • 打赏
  • 举报
回复
1.添加引用,然后在using里面把dll的命名空间添加上,然后呢就可以调用啦
2.[DllImport("your.dll")]
@oomoo@ 2008-11-25
  • 打赏
  • 举报
回复
所以 万一你怕你在你工程的引用路径里找不到这些dll的话
你就将你需要的dll拷贝到与".exe"同一目录下吧

[Quote=引用 9 楼 mykelly6 的回复:]
我试了下添加引用时不行的,应该是基于Win32API的,但是在程序中引用的话这个路径未必是固定的阿
[/Quote]

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧