net平台上,调用dll文件有2种含义
1、调用托管dll,即你使用。net平台开发的dll,属于托管代码
2、调用非托管dll,即传统的dll,一般是C++,VB,DELPHI等等开发出来的,属于非托管代码。
从你的意思中看出来你现在是调用托管的dll,方法是 “在解决方案管理器” - “解决方案”(或项目) 中的任意地方, 右键“添加引用”,“浏览”,选择你需要调用的dll文件,确定即可,该dll会自动复制到bin目录,打包时也会自动复制到你发布的地方。
添加完了引用,现在如何调用呢?

如果有命名空间则引入命名空间,比如你的y。dll里面,是a命名空间,有一个b类,然后有一个无参数静态方法c
那么调用方法就是a.b.c(),跟你普通的使用类是一样的

然后是非托管dll
需要添加dll的名称,以及方法,也就是你所用到的dll的每个方法都需要添加一次,
[DllImport("msvcrt.dll")]
public static extern int puts(string c);

*******************************************************************************************

在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能反编译。这样一来,就涉及C#托管代码与C++非托管代码互相调用,于是调查了一些资料,顺便与大家分享一下:源代码下载

一. C# 中静态调用C++动态链接


   1. 建立VC工程CppDemo,建立的时候选择Win32 Console(dll),选择Dll。

   2. 在DllDemo.cpp文件中添加这些代码。

ContractedBlock.gif ExpandedBlockStart.gif Code
extern"C" __declspec(dllexport) int Add(int a,int b)
{

return a+b;
}

   3. 编译工程。

   4. 建立新的C#工程,选择Console应用程序,建立测试程序InteropDemo
   5. 在Program.cs中添加引用:using System.Runtime.InteropServices;

   6. 在pulic class Program添加如下代码:


ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace InteropDemo
{
class Program
   {
       [DllImport("CppDemo.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
publicstaticexternint Add(int a, int b); //DllImport请参照MSDN