在VS2008中用C++生成DLL为Test,Test中有类BM,BM定义如下:如何在C#中调用BM中的insert和contains成员函数调用?
class BM { public: bloom_filter(unsigned int tbl_size) { table_size = tbl_size; hash_table = new unsigned char[table_size]; for(std::size_t i = 0; i < table_size; ++i) hash_table[i] = 0; } void insert(char* key) { for(std::size_t i = 0; i < hash_function.size(); i++) { unsigned int hash = hash_function[i](key,3) % (table_size * char_size); hash_table[hash / char_size] |= bit_mask[hash % char_size]; } } /* bool contains(const std::string& key)*/ bool contains(char* key) { for(std::size_t i = 0; i < hash_function.size(); i++) { unsigned int hash = hash_function[i](key,3) % (table_size * char_size); unsigned int bit = hash % char_size; if ((hash_table[hash / char_size] & bit_mask[bit]) != bit_mask[bit]) { return false; } } return true; } private: std::vector < hash_function > hash_function; unsigned char* hash_table; unsigned int table_size; }; |
C#直接调用不支持,你使用P/Invoke的话,只能引入DLL的引出函数,因此最好包装成标准的WIndows API风格在C#中调用;或者使用C++/CLI包装你的类,然后C#调用C++/CLI,不过调用层次有些多
http://zhidao.baidu.com/question/204935129.html
这里有个解答,LZ可以看看。
大概是加这么一句:
using System.Runtime.InteropServices;//引入dll文件中的函数