first thing

http://www.sgi.com/tech/stl/table_of_contents.html

Next

Code:
typedef std::map<std::string, std::string> MyMap;
MyMap TestMap;

//export function..

extern "C" int WINAPI Test(HWND, HWND, char *data, char *parms, BOOL, BOOL) {

  std::string chan( "#Channel" );
  std::string mark( "Mark" );

  TestMap.insert( MyMap::value_type( chan, mark ) );

  MyMap::iterator it = TestMap.find( chan );

  if ( it != TestMap.end( ) ) {

    lstrcpy( data, (*it).second.c_str( ) );
  }

  return 3;
}


Little explanation :

You need to have your insert types to be the same as defined in your map. Strings like "blah" are C-Strings and not std::string onjects. Next you insert like demonstrated which adds the item in the map (the map is like a hash table, it's sorted as a binary tree (on the key) for fast access and search, there is no order).

When you use the find method on your map with a std::string as an argument which matches your defined map key type, it will return an iterator to the item. You need to check that this iterator isn't the end of the map (essentially pointing to NULL since it didn't find the item which you get by using .end( ) function to check the condition). An iterator is a pointer to an item. A map item has 2 properties, .first which is the "key" and .second which is the "data" and since these are atd::string, I need to retreive them as a C-String to be able to copy the value into the char * data that mIRC gives.

Note: I'm not a fan of using the "use namespace std;" as I prefer to typedef my items instead as your are sure your "string" or "map" come from STD and not another library.

Last, if you are really interested in STL, you should ditch the DLL for now and concentrate on understanding it with a simple console application to test how it works and be confortable with iterators and the such (the whole STL works in every object the same way).